这个问题已经有答案了:
How to set File objects and length property at FileList object where the files are also reflected at FormData object?(1个答案)
20小时前关闭。
我想实现一个多文件上传的形式,其中我想要的文件,以便用户可以排序的文件的优先级(我使用可拖动和排序的Jquery工具)。
因此,我添加了一个多文件输入:
<input type = "file" multiple>
现在,当我选择一些文件,它显示说3个文件选定。但是当我选择3个文件时,我希望将文件上传器分成3部分,以便用户可以相应地设置优先级排序。
为此,我使用了以下类型的代码:
$('.files').change(function(e){
var filesSelected = e.target.files;
if(filesSelected.length > 1){ //if user selects multiple files, then automatically split the files into multiple divs so that he/she may do the ordering of files
//Here I want to create a list of all the files and implement the draggable and sortable thing.
}
});
现在的情况是,我不能拆分FileList的对象数组,并将每个对象分配给另一个输入。
希望我清楚我的疑问和问题是可以理解的,因为这是我第一次在任何这样的论坛发帖。
4条答案
按热度按时间tzdcorbm1#
不能以编程方式设置
<input type="file">
的值。这将是一个主要的安全流程。想象一下,一些网站自动从您的计算机上传任意文件。jdg4fx2g2#
您可以尝试遍历选定的文件,然后使用jQuery动态创建一个div,其中包含来自文件的数据,如下所示
v8wbuo2f3#
从我收到的帖子和简短的讨论中,很明显,以编程方式设置文件值将构成安全威胁,因此不是一个好的选择。就解决我的问题而言,最好是找到一种方法来创建多个div/字段,其中包含正在上传的文件的文件名,然后在该div集合中应用拖放/排序功能。通过这种方式,用户可以轻松地对文件进行优先级排序,并且在保存表单时,在将文件数据保存到数据库中之前,应考虑包含优先级的数组/字段。
感谢响应者的快速响应。
pprl5pva4#
很高兴你找到了解决问题的方法。在此基础上,我有另一个问题。我希望用户能够选择多个文件,多次。但是每次用户选择新文件时,旧文件都会丢失。
我还建立了一个多文件上传,展示优先级(序列)和文件预览(我的工作与图像)。由于“input.files”是只读属性,因此不能将新文件分配给任何输入。
一个对我有效的变通方法是
1.为我的输入字段使用一个标签,并隐藏输入。
1.在用户选择文件之后,克隆该输入并删除原始输入的ID(以便标签不再引用它)。并将新输入添加到表单。
这样,输入的“名称”保持不变,并且在提交表单时保持不变。所有的文件都发送出去了。
这是HTML示例:
这是一个JavaScript代码片段:
但是,这种方法会引入多次上传同一文件的风险,但这可以通过使用额外的逻辑来防止。