是否可以使用所选文件创建文件输入

时间:2012-02-11 00:36:19

标签: javascript jquery html5

所以,假设我有一个这样的输入:

<input id="test" multiple="true" type="file" name="image_name[]" />

现在,在我选择了一些文件之后,我想将它们“转移”到简单的inputs 像这样的东西

var offset = 0;
$.each($("#test")[0].files, function(i, file){
   $("#my_form").prepend(
  '<input type="file" name="image" value="'+$("#test")[0].item(offset).name+'" />'
   )
   offset++;
});

然后当然我会提交它们,现在我知道这段代码是非常错误的,但我对javascript不是很好,所以这只是我的猜测:)

3 个答案:

答案 0 :(得分:5)

出于安全原因,您无法使用预定义值生成input[type="file"]元素。并且所有jQuery gobbledygook都无法实现它,因为与常见的误解相反,jQuery是构建在 DOM API上的; jQuery是围绕DOM API的包装器(非常低效且容易出错)并且替换它。

如果你可以做你想做的事情,你访问的任何网站都可以默默地从你的计算机提交任何文件,只要破解者知道文件路径或者只是猜对了。您不希望浏览器供应商允许这种情况发生。

答案 1 :(得分:3)

无法设置必须由用户以某种方式完成的<input type="file">中的路径/值(单击框,拖放)。

这是一项安全功能,可防止网页上的脚本与用户的硬盘进行交互。

答案 2 :(得分:1)

您可以看到已选择的文件,但是您无法设置要上传的文件,这将是一个严重的安全风险:

$('input[type="file"]').on('change', function () {
    var output = [];
    for (var i = 0, len = this.files.length; i < len; i++) {
        output[output.length] =  this.files[i].name;
    }
    //output now stores an array of names of the files
});

以下是演示:http://jsfiddle.net/7LuZM/

我仅在Chrome 17中对此进行了测试。我知道multiple=true非常新,所以您可能会遇到很大的跨浏览器问题(在HTML5规范中):https://developer.mozilla.org/en/DOM/Input.multiple < / p>

我发现此帖非常有用:http://davidwalsh.name/multiple-file-upload

更新

以下是我为files元素的input[type="file"]属性找到的结构:

FileList

    0: File
        fileName: "Airstream.zip"
        fileSize: 22891
        lastModifiedDate: Fri Dec 16 2011 14:36:31 GMT-0800 (Pacific Standard Time)
        name: "Airstream.zip"
        size: 22891
        type: "application/x-zip-compressed"
        webkitRelativePath: ""
        __proto__: File

    1: File
        fileName: "Animated-CSS3-Button-5.25.11.zip"
        fileSize: 7764
        lastModifiedDate: Fri Jan 06 2012 13:15:13 GMT-0800 (Pacific Standard Time)
        name: "Animated-CSS3-Button-5.25.11.zip"
        size: 7764
        type: "application/x-zip-compressed"
        webkitRelativePath: ""
        __proto__: File

    2: File
        fileName: "apache-ant-1.8.2-bin.zip"
        fileSize: 10920710
        lastModifiedDate: Fri May 13 2011 11:35:03 GMT-0700 (Pacific Daylight Time)
        name: "apache-ant-1.8.2-bin.zip"
        size: 10920710
        type: "application/x-zip-compressed"
        webkitRelativePath: ""
        __proto__: File

    length: 3
    __proto__: FileList