Javascript 创建文件列表并将其复制到文件输入

Javascript 创建文件列表并将其复制到文件输入,javascript,html,google-chrome,fileapi,Javascript,Html,Google Chrome,Fileapi,我试图创建一个拖放区域,通过webkitGetAsEntry获取数据传输项,并检查条目是否为目录或文件 然后,我希望能够将这些文件制作成一个文件列表,并将其复制到一个文件输入(在发布之前将进行验证和处理) 函数handleDrop(事件){ event.preventDefault(); event.dataTransfer.dropEffect='copy'; var length=event.dataTransfer.items.length; var elFileInput=docume

我试图创建一个拖放区域,通过webkitGetAsEntry获取数据传输项,并检查条目是否为目录或文件

然后,我希望能够将这些文件制作成一个文件列表,并将其复制到一个文件输入(在发布之前将进行验证和处理)

函数handleDrop(事件){
event.preventDefault();
event.dataTransfer.dropEffect='copy';
var length=event.dataTransfer.items.length;
var elFileInput=document.getElementById('File');
对于(变量i=0;i
我无法将文件复制到HTMLInputElement中的文件列表,因为它是只读的

我一直在尝试使用原型和扩展对象来创建文件列表对象,我还没有完全了解JS继承和原型

我甚至可以创建一个FileList对象并用文件填充它,然后将其复制到InputElement


编辑:错误的JSFIDLE链接。

为什么需要将文件复制到文件列表

改用FileReader。但是在发送之前验证文件不是一个好主意。为了安全起见,您应该在服务器端执行此操作。您可以在收到文件之前验证该文件,但在收到文件时应再次验证该文件


我正在使用MVC3中的注释对HtmlInputElement进行客户端和服务器端验证。表单作为HttpPostedFileBase类发布并在控制器中处理。我正在考虑改用FileRead,并使用XMLHttpRequest发布文件,但如果我能让它起作用,我会很高兴的。相关:这几天似乎是可能的,但只有使用真正的
文件列表
,而你似乎无法做到这些。。。
  function handleDrop(event) {
        event.preventDefault();
        event.dataTransfer.dropEffect = 'copy';
        var length = event.dataTransfer.items.length;
        var elFileInput = document.getElementById('File');
        for (var i = 0; i < length; i++) {
            var entry = event.dataTransfer.items[i].webkitGetAsEntry();
            if (entry.isFile) {
                convertFilesToFileObjects(entry);          
            } 
            else if (entry.isDirectory) {
                var dirReader = entry.createReader();
                dirReader.readEntries(function(entries) {
                    for (var j = 0; j < entries.length; j++) {
                        convertFileEntrysToFileObjects(entries[j]);
                    }
                });
            }
        }   
        function convertFileEntrysToFileObjects(fileEntry) {        
            var addFileToInput = function (file) {
                console.log(file);
                //elFileInput.files = event.dataTransfer.files;
                //Need to make a FileList and populate it with Files.
            };       
            if (fileEntry.isFile) {
                fileEntry.file(function (addFileToInput, file) {
                    addFileToInput(file);
                }.bind(this, addFileToInput));
            }
        }
    }