【问题标题】:Assign multiple images (files) from one file input to another file input(s) - upload将多个图像(文件)从一个文件输入分配到另一个文件输入 - 上传
【发布时间】:2016-02-28 00:04:35
【问题描述】:

当我从对话框中选择要上传的每个文件时,我已经成功上传代码,使用 AJAX 可以完美运行。因此,每个上传都有自己的表单和输入文件(上传按钮),如下所示。当前代码按顺序上传文件,因为用户可以选择多张照片但不能一起选择 & 我在 Javascript 中使用带有 setTimeout 的排队算法来检查第一次上传是否完成以开始第二次上传、第三次和以此类推。

<form id="form1">
    <input type="file" id="userfile1" name="userfile[]" multiple/>
</form>

<form id="form2">
    <input type="file" id="userfile2" name="userfile[]" multiple/>
</form>
.
.
.

现在的问题是,当我选择要上传的多张图片时(假设两张图片一起使用 Ctrl),使用第一个输入文件,我将它们放在这个数组中:

document.getElementById('userfile1').files; 

那么现在,我怎样才能将第二个选择的图像分配给第二个输入文件

userfile2

因为我想像以前一样继续上传?它不适用于我,我读到更新输入文件存在安全问题,但我需要分配用户选择的内容,而不是路径。

我不想将 FromData 与 AJAX 一起使用,因为这会导致更改我的所有代码,而且它与我的代码等所有浏览器都不兼容。

非常感谢您的帮助!

【问题讨论】:

    标签: javascript file-upload


    【解决方案1】:

    无法使用javascriptFile 对象分配给input type="file" 元素。 请参阅How to set File objects and length property at FileList object where the files are also reflected at FormData object?File 对象应由用户选择。可以从multipleFile 选择返回的FileList 中选择单个或多个File 对象,并将该选定文件作为单独的进程发送到服务器

    document.querySelector("input[name=files]")
      .addEventListener("change", function(event) {
        var files = Array.prototype.slice.call(event.target.files),
          filtered = [];
        for (var i = 0; i < files.length; i++) {
          if (i > 0) filtered.push(files[i])
        };
        if (filtered.length) {
          console.log(files, filtered);
          filtered.forEach(function(file) {
            // do stuff
          })
        }
      })
    &lt;input name="files" type="file" accept="image/*" multiple="true" /&gt;

    现在的问题是,当我选择要上传的多张图片时(比如说 两个图像一起使用Ctrl),使用第一个输入文件,我得到 他们在这个数组中

    注意,被选中的多个文件返回的FileList对象不是Array

    另见input file to array javascript/jqueryTrigger click on input=file on asynchronous ajax done()Simulate drop file event

    【讨论】:

    • @moderns 一种解决方法是从返回的FileList 中选择特定的File 对象,使用FileReaderBlobXMLHttpRequest“克隆”文件并执行使用所选文件的单独任务
    • 非常感谢,但很抱歉我没有让你好,请你提供一个代码,我会提交你的答案作为正确的答案吗?感谢您的帮助。
    • 谢谢,那将在 JavaScript 中完成,对吧?还有一件事,类似操作的任何源链接?我今天在尝试和寻找时失去了双眼。
    • 不,它不会将File 对象分配给第二个input;这是不可能的。可以过滤选定的文件并对这些文件执行单独的处理,例如,使用ajax上传
    • 您可以使用Promise仅在第一次上传完成后执行第二次上传,或者在每次上传时使用进度条异步执行上传,请参阅stackoverflow.com/questions/28856729/…
    猜你喜欢
    • 2017-06-02
    • 1970-01-01
    • 2015-05-09
    • 2017-07-19
    • 1970-01-01
    • 2012-08-16
    • 2020-08-27
    • 2023-02-12
    • 1970-01-01
    相关资源
    最近更新 更多