文件字段 - 附加文件列表

时间:2013-05-24 20:15:15

标签: html5 forms file-upload fileapi

我给了我一个简单的文件字段:

<input type="file" name="pictures_array[]" multiple accept="image/*" id="page_pictures_array" />

和一些列出文件的HTML5文件API代码:

$('.page-form #page_pictures_array').change(function(evt) {
      var file, files, reader, _i, _len;
      files = evt.target.files;
      console.log(files);
      $('#file-list').empty();
      for (_i = 0, _len = files.length; _i < _len; _i++) {
        file = files[_i];
        reader = new window.FileReader;
        reader.onload = (function(file) {
          return function(e) {
            var src;
            src = e.target.result;
            return $("<li>" + file.name + " - " + file.size + " bytes</li>").prepend($('<img/>', {
              src: src,
              "class": 'thumb'
            })).appendTo($('#file-list'));
          };
        })(file);
        reader.readAsDataURL(file);
      }
    });

(参见here

但是,由于我希望我的用户确实非常愚蠢,我相信他们会选择一个文件,然后再次点击上传字段来选择下一个。但是,每次使用新选择的图像重置<input type="file">列表。

如何确保将新文件附加到<input>的数组中,这样我就不会被愤怒的用户评论所淹没?

1 个答案:

答案 0 :(得分:2)

我也在寻找答案,我认为其他人已经这样做了。 但是如果你看一下文件列表W3引用http://www.w3.org/TR/FileAPI/#dfn-filelist,它就说它只读....

编辑:现在这是一个很大的代码,有一些改进,使复制/粘贴变得困难。但是我开始创建一个保存所有tmp文件的变量。

var tmp_files = new Array();

然后,当我添加一个新文件时,我将文件推送到该数组

tmp_files.push(file);

当用户点击发送文件后,所有插入/删除(我有另一个var保存删除)后,我有这个代码,使得formdata包含我想要的文件

var data = new FormData(); var count = 0;
$.each(tmp_files, function(i, file){
    if(del_files.indexOf(file.name)== -1){
        data.append(count, file);
        count++;
    }
});

然后我只是通过ajax发送var数据并保存它们。 你可以使用$ data = $ _FILES;

来获取它们

希望这会对你有所帮助。