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.pngtrutruc (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

  1. 添加数据库连接参数
  2. 编写SQL查询函数
  3. 编写第二个函数来执行查询
  4. 调用第二个函数

请参阅: https : //github.com/blueimp/jQuery-File-Upload/wiki/Working-with-databases

嗯,这是一个相当古老的post,但这对我来说非常好,所以我想发布它。

  1. 将事件绑定到FileUploader(我在main.js中完成):

      $('#fileupload').bind('fileuploaddone', function (e, data) { FileUploadDone(e, data); }); 
  2. 在您的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]); });