jQuery fileupload – 获取上传文件的列表
我正在使用非常好的jquery插件blueimp / jQuery-File-Upload
$('#fileupload').fileupload({ autoUpload: true , filesContainer: '#attachments_presentation tbody' , stop: function (e) { console.log(data); } });
而且我无法做一些非常简单的事情:获取上传文件的列表
(在服务器上用他们的名字)
首先,我天真地虽然它将存储在文件输入,所以我可以得到列表
$('#fileupload').val();
但事实并非如此,所以我对此感到满意
$('#fileupload').fileupload('getfiles');
我无法从文档中找到方法
有人能告诉我如何在服务器中获取上传文件名列表吗?
更新
我想在服务器上获取上传的文件名,以便以后能够管理它们。
例如:
- 我上传了一个名为
trutruc.pdf
的文件 - 我上传
test.png
- 我重新上传了一个名为
trutruc.pdf
的文件 - 我删除了第一个文件
然后,服务器中的当前文件列表应为test.png
, trutruc (2).pdf
更新2
我正在使用fileUpload 附带的默认php脚本
当您实例化默认插件时,有一个代码部分正在检索所有以前上传的文件(假设您没有更改服务器代码):
请参阅main.js
文件第70行:
// Load existing files: $.ajax({ // Uncomment the following to send cross-domain cookies: //xhrFields: {withCredentials: true}, url: $('#fileupload').fileupload('option', 'url'), dataType: 'json', context: $('#fileupload')[0] }).done(function (result) { $(this).fileupload('option', 'done') .call(this, null, {result: result}); });
如果你进一步查看代码,有一个表格将填写模板:
加载文件后,您可以轻松地从该表中解析每个文件:
$('tbody.files tr').each(function(i, e) { //according to @Brandon's comment it's now p.name var name = $(e).find('td.name').text(); var size = $(e).find('td.size').text(); //etc. });
我使用UI版本。 这是从文件表中获取服务器链接并填充数组的脚本:
var files = new Array(); $("#fileupload td p.name a").each(function() { var name = $(this).attr("href"); files.push(name); }); alert(files.join('\n'));
你也可以试试这个
$('#fileupload').bind('fileuploadcompleted', function (e, data) { var filess= data.result.files[0]; var filenam = filess.name; alert(filenam); });
我有同样的问题,经过几个小时和几十个文件上传后,我想我有你需要的答案:
done: function (e, data) { response = data.response(); parsedresponse = $.parseJSON(response.result); console.log(parsedresponse.files); }
如您所见,您将在parsedresponse.files[i].url
( 我是上传文件的从0开始的索引)中找到上传的文件名。
好的…它是上传文件的URL,但您将能够提取最终文件名…
希望能帮助到你。 (这在文档中没有任何地方,我设法通过检查Firebug控制台输出来获得此解决方案)
要从服务器获取上载的文件名列表,需要服务器端代码:
UploadHandler.php用于将文件上传到服务器上的目录。
如果您已下载插件存档并将其解压缩到服务器,则默认情况下这些文件将存储在php / files中。 (确保php / files目录具有服务器写权限。)请参阅: https : //github.com/blueimp/jQuery-File-Upload/wiki/Setup
UploadHandler.php只是一个上传处理程序。 如果没有与服务器的连接,它不提供对服务器文件的访问。
JavaScript无法访问服务器上的文件,因此您需要一个php脚本来执行此操作。 (尽管JavaScript可能会跟踪上传,重命名和删除的所有内容。)
您可以修改UploadHandler.php以连接到数据库,并在上载期间将文件路径(和任何其他数据)写入文件表。 然后,您可以通过标准SQL查询访问您的文件:
修改UploadHandler.php :
- 添加数据库连接参数
- 编写SQL查询函数
- 编写第二个函数来执行查询
- 调用第二个函数
请参阅: https : //github.com/blueimp/jQuery-File-Upload/wiki/Working-with-databases
嗯,这是一个相当古老的post,但这对我来说非常好,所以我想发布它。
-
将事件绑定到FileUploader(我在main.js中完成):
$('#fileupload').bind('fileuploaddone', function (e, data) { FileUploadDone(e, data); });
-
在您的html文件中,使用以下代码获取文件名:
function FileUploadDone(e, data) { for (x in data._response.result.files){ if (data._response.result.files[x].error == "") alert(data._response.result.files[x].name); else alert(data._response.result.files[x].error); }}
你应该在firebug中观察数据对象。 该对象封装了大部分信息。
如果您使用文档中提到的basic-plugin,则需要将数据传递给done属性中的函数。 改变这个:
stop: function (e) {
对此:
done: function (e, data) {
我不知道如果你从其中一个文档页面获取它,那么我认为同样适用于这里你不能使用数据,如果它不可用。
希望这有帮助
尝试使用done方法并将名称放入隐藏输入中,然后选择它们:
$('#fileupload').fileupload({ autoUpload: true , filesContainer: '#attachments_presentation tbody' , stop: function (e) { console.log(data); } , done: function(e,data){ var filess= data.files[0]; var filenam = filess.name; data.context.text(filenam+' uploaded successfully.'); $('#formId').append(''); } });
上传完成后获取文件列表:
$('#fileupload').bind('fileuploadfinished', function (e, data) { console.log(data.originalFiles); });
// Initialize the jQuery File Upload widget: $('#edit-product').fileupload({ // Uncomment the following to send cross-domain cookies: //xhrFields: {withCredentials: true}, disableImageResize: false, autoUpload:false, url: 'YOURURL' }).bind('fileuploaddone', function (e, data) { console.log(data.result.files[0]); });