symfony 2 上的 OneupUploaderBundle 和 jQuery-File-Upload
OneupUploaderBundle and jQuery-File-Upload on symfony 2
我一直在尝试这个,但我很困惑,因为我是 Symfony 事件和东西的新手。
这是我到目前为止的进展:
- composer 包安装
- AppKernel.php、routing.yml、services.yml、config.yml、UploadListener.php 文件修改
它起作用了,我放的文件实际上正在上传到文件夹中,我得到了填充状态栏...但我还需要其他东西:
- 不知何故,我需要 post(并读取)项目 ID(整数)以及文件(或者能够在将文件复制到输出文件夹时设置文件名)
- 如果上传出现问题,我该如何发回错误消息?
- 在示例(jQuery-File-Uploader)中,代码 returns 上传文件的文件名,我的代码没有这样做,我的意思是代码在那里, 但它不起作用
我正在post输入我的代码。
HTML 代码(这里是我调用 jQuery-File-Upload
<tr>
<td>{{ clienteCorporativo.nombreComercial|upper }}</td>
<td>{% if clienteCorporativo.afiliadosUploads|length == 0 %}Nunca{% else %}{{ (clienteCorporativo.afiliadosUploads|last).fecha|date('d/mmm/y') }}{% endif %}</td>
<td>
{% if clienteCorporativo.formatoExcelAfiliados == null %}
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-upload"></i>
<span>Seleccionar Excel</span>
<input id="fileupload_{{ clienteCorporativo.id }}" class="fileupload" data-id="{{ clienteCorporativo.id }}" type="file" name="files[]" multiple>
</span>
{#<span style="color: #8c8c8c"><span class="glyphicon glyphicon-upload"></span> Seleccionar Excel </span>#}
{% else %}
<input id="fileupload_{{ clienteCorporativo.id }}" class="fileupload" type="file" name="files[]" data-url="{{ oneup_uploader_endpoint('gallery') }}" />
{#<a role="button" data-toggle="modal" data-target="#myModal" data-operation="loadOne" data-id="{{ clienteCorporativo.id }}"><span class="glyphicon glyphicon-upload"></span> Seleccionar Excel</a> #}
{% endif %}
<a role="button" data-toggle="modal" data-target="#myModal" data-operation="defineFormat" data-id="{{ clienteCorporativo.id }}"><span class="glyphicon glyphicon-list-alt"></span> Definir Formato</a>
{% if clienteCorporativo.afiliadosUploads|length == 0 %}
<span style="color: #8c8c8c"><span class="glyphicon glyphicon-repeat"></span> Revertir Última Carga </span>
{% else %}
<a role="button" data-toggle="modal" data-target="#myModal" data-operation="undoLast" data-id="{{ clienteCorporativo.id }}"><span class="glyphicon glyphicon-repeat"></span> Revertir Última Carga</a>
{% endif %}
</td>
<td>
<div id="progress_{{ clienteCorporativo.id }}" class="progress text-center">
<div class="progress-bar progress-bar-success">
<span id="files_{{ clienteCorporativo.id }}"></span>
</div>
</div>
</td>
</tr>
js 脚本("each" 语句什么都不做)
<script>
/*jslint unparam: true */
/*global window, $ */
var idFile = 0;
$(function () {
'use strict';
// Change this to the location of your server-side upload handler:
$('.fileupload').fileupload({
url: '{{ oneup_uploader_endpoint('xlsfile') }}',
dataType: 'json',
done: function (e, data) {
var eventTrigger = $(this)
idFile = eventTrigger.data('id')
$.each(data.result.files, function (index, file) {
$('#files_'+idFile).html(file.name);
});
},
progressall: function (e, data) {
var eventTrigger = $(this)
idFile = eventTrigger.data('id')
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress_'+idFile+' .progress-bar').css(
'width',
progress + '%'
);
},
formData: [ {"id":idFile} ]
}).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
//
});
</script>
其他文件(AppKernel.php、routing.yml、services.yml、config.yml、UploadListener.php)就像 OneupUploaderBundle 文档所说的那样(我已经改变了一些东西然后回滚,因为我没有得到我预期的结果)。我想我咀嚼得更多了,我可以吞下这个...
您的表单字段将与文件上传一起发布。或者您可以在 $('#myFile').fileUploader()
构造函数中使用 form_data: {}
选项。但它会默认提交您的表单字段,您可以按照通常的方式处理这些字段。
$('#myFile').fileupload({
dataType: 'json',
formData: {
'file_id': 1
},
您必须在 UploadListener 中制作您自己的 return 响应。然后在前端解析结果(Javascript)。
$response = $event->getResponse();
$response['success'] = true;
$response['files'] = [
'file' => [
'name' => $event->getFile()->getPathname()
]
];
return $response;
我一直在尝试这个,但我很困惑,因为我是 Symfony 事件和东西的新手。
这是我到目前为止的进展:
- composer 包安装
- AppKernel.php、routing.yml、services.yml、config.yml、UploadListener.php 文件修改
它起作用了,我放的文件实际上正在上传到文件夹中,我得到了填充状态栏...但我还需要其他东西:
- 不知何故,我需要 post(并读取)项目 ID(整数)以及文件(或者能够在将文件复制到输出文件夹时设置文件名)
- 如果上传出现问题,我该如何发回错误消息?
- 在示例(jQuery-File-Uploader)中,代码 returns 上传文件的文件名,我的代码没有这样做,我的意思是代码在那里, 但它不起作用
我正在post输入我的代码。
HTML 代码(这里是我调用 jQuery-File-Upload
<tr>
<td>{{ clienteCorporativo.nombreComercial|upper }}</td>
<td>{% if clienteCorporativo.afiliadosUploads|length == 0 %}Nunca{% else %}{{ (clienteCorporativo.afiliadosUploads|last).fecha|date('d/mmm/y') }}{% endif %}</td>
<td>
{% if clienteCorporativo.formatoExcelAfiliados == null %}
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-upload"></i>
<span>Seleccionar Excel</span>
<input id="fileupload_{{ clienteCorporativo.id }}" class="fileupload" data-id="{{ clienteCorporativo.id }}" type="file" name="files[]" multiple>
</span>
{#<span style="color: #8c8c8c"><span class="glyphicon glyphicon-upload"></span> Seleccionar Excel </span>#}
{% else %}
<input id="fileupload_{{ clienteCorporativo.id }}" class="fileupload" type="file" name="files[]" data-url="{{ oneup_uploader_endpoint('gallery') }}" />
{#<a role="button" data-toggle="modal" data-target="#myModal" data-operation="loadOne" data-id="{{ clienteCorporativo.id }}"><span class="glyphicon glyphicon-upload"></span> Seleccionar Excel</a> #}
{% endif %}
<a role="button" data-toggle="modal" data-target="#myModal" data-operation="defineFormat" data-id="{{ clienteCorporativo.id }}"><span class="glyphicon glyphicon-list-alt"></span> Definir Formato</a>
{% if clienteCorporativo.afiliadosUploads|length == 0 %}
<span style="color: #8c8c8c"><span class="glyphicon glyphicon-repeat"></span> Revertir Última Carga </span>
{% else %}
<a role="button" data-toggle="modal" data-target="#myModal" data-operation="undoLast" data-id="{{ clienteCorporativo.id }}"><span class="glyphicon glyphicon-repeat"></span> Revertir Última Carga</a>
{% endif %}
</td>
<td>
<div id="progress_{{ clienteCorporativo.id }}" class="progress text-center">
<div class="progress-bar progress-bar-success">
<span id="files_{{ clienteCorporativo.id }}"></span>
</div>
</div>
</td>
</tr>
js 脚本("each" 语句什么都不做)
<script>
/*jslint unparam: true */
/*global window, $ */
var idFile = 0;
$(function () {
'use strict';
// Change this to the location of your server-side upload handler:
$('.fileupload').fileupload({
url: '{{ oneup_uploader_endpoint('xlsfile') }}',
dataType: 'json',
done: function (e, data) {
var eventTrigger = $(this)
idFile = eventTrigger.data('id')
$.each(data.result.files, function (index, file) {
$('#files_'+idFile).html(file.name);
});
},
progressall: function (e, data) {
var eventTrigger = $(this)
idFile = eventTrigger.data('id')
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress_'+idFile+' .progress-bar').css(
'width',
progress + '%'
);
},
formData: [ {"id":idFile} ]
}).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
//
});
</script>
其他文件(AppKernel.php、routing.yml、services.yml、config.yml、UploadListener.php)就像 OneupUploaderBundle 文档所说的那样(我已经改变了一些东西然后回滚,因为我没有得到我预期的结果)。我想我咀嚼得更多了,我可以吞下这个...
您的表单字段将与文件上传一起发布。或者您可以在 $('#myFile').fileUploader()
构造函数中使用 form_data: {}
选项。但它会默认提交您的表单字段,您可以按照通常的方式处理这些字段。
$('#myFile').fileupload({
dataType: 'json',
formData: {
'file_id': 1
},
您必须在 UploadListener 中制作您自己的 return 响应。然后在前端解析结果(Javascript)。
$response = $event->getResponse();
$response['success'] = true;
$response['files'] = [
'file' => [
'name' => $event->getFile()->getPathname()
]
];
return $response;