【问题标题】:Set input file element with file using HTML5 File API使用 HTML5 File API 使用文件设置输入文件元素
【发布时间】:2011-08-28 17:41:02
【问题描述】:

我正在使用输入文件元素在我的 JSP 页面中上传文件。用户可以通过单击一个按钮来上传文件,该按钮使用浏览器的浏览按钮打开一个表单

现在,我想使用 HTML5 的拖放功能上传文件(如 @html5 rocks page 所述)。我可以使用 File API 提取文件名。有没有办法使用 File API 加载输入文件元素和删除的文件? (以便我可以使用相同的行为来上传文件)

【问题讨论】:

    标签: html file-upload drag-and-drop


    【解决方案1】:

    我能够使用 dataTransfer 对象的 files 属性设置输入元素的“files”属性。

    document.getElementById("插入输入文件id").files = evt.dataTransfer.files;

    我刚刚尝试使用 getelement.value 并出现错误。使用文件列表设置文件属性。

    编程愉快!

    克雷姆纳里

    【讨论】:

    • 我喜欢这个解决方案。但它在 IE 11 或 Firefox 中不起作用(input.files 是只读属性)。
    • 当您发布表单时它是否真的提交了文件?不适合我(Chrome v43)
    【解决方案2】:

    在 javascript 中处理任何与客户端相关的内容确实是不可能的。但是,您可以use the file api to convert the image to base64。然后,您可以通过表单和隐藏输入值(或使用 javascript 创建的输入值)将此值发送到服务器,用 php 或您使用的任何服务器端语言对其进行解码,并将其保存为图像文件。

    【讨论】:

      【解决方案3】:

      没有办法直接在 JS 中设置 <input type=file> 的值。那个动作 需要用户干预(以及单击文件选择器)。但是,您可以使用 xhr.send(FormData)xhr.send(File) 发送文件。在此处查看我的回复:

      HTML5 File API readAsBinaryString reads files as much larger, different than files on disk

      在您的放置处理程序中,只需将从evt.dataTransfer.files 获得的FileList 传递给该uploadFiles() 助手。

      【讨论】:

      • 这是处理拖放上传的最佳方式,没有之一。我根据 ebidel 的代码做了一个小提琴来展示它的实际效果。 jsfiddle.net/chad/Qrfb7
      猜你喜欢
      • 2019-02-02
      • 2016-07-13
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2021-10-20
      • 2015-08-12
      相关资源
      最近更新 更多