【问题标题】:<input type="file"/> posting data as...?<input type="file"/> 将数据发布为...?
【发布时间】:2011-12-31 14:20:51
【问题描述】:

我什至不确定这是否可能......

给定一个带有&lt;input id="fileinput" type="file" /&gt; 的表单和一个有效的选定文件,我可以使用document.getElementById("fileinput").valueXMLHttpRequest 对象中发布value 并期望$_FILES 保存该对象吗?如果可以合理地预期 POST 会通过,我如何获取文件的信息?

跟进

是否可以使用标准的XMLHttpRequest 对象和FileReader 来上传文件?或者这是一个完全不同的鱼罐头?我正在尽量减少无关代码,而不是反复问愚蠢的问题。

编辑 - 关闭

发现它可以在没有文件阅读器的情况下仅使用基本文件 API 来完成,而且几乎没有问题,尽管它为拥有它的人整合了文件阅读器。

基本上,use XMLHttpRequest().upload 发送File。完全异步;但在 IE 或 Opera 中没有乐趣,在这种情况下,我可以退回到标准同步形式或 iframe fake。

无论如何,由于显然它无法完成,我认为它会成为一个伟大的开源作品来发布。谢谢大家。

【问题讨论】:

标签: php javascript html post file-upload


【解决方案1】:

您可以在 HTML5 中:http://jsfiddle.net/Cjs4G/

document.getElementById("upload").onchange = function(e) { // on file select
    var fr = new FileReader; // reads files

    fr.onloadend = function() {             // when done reading
        alert(fr.result.substring(0, 100)); // alert first part of data
        // or send `fr.result` through AJAX
    };

    fr.readAsBinaryString(e.target.files[0]); // start reading
};

【讨论】:

  • 好。在 Safari 中不起作用,这意味着我可以使用 iframe 方法退回到 Safari。
  • @stslavik:我相信它甚至不能在 IE9 中工作,所以它可能还没有准备好生产。
  • 可能不会。但我得到了以前没有的选项(查看所有以“否”开头的答案)
【解决方案2】:

尝试评估文件上传器

我只是在一周前实现了它来上传 ajax 图片

https://github.com/valums/file-uploader

【讨论】:

    【解决方案3】:

    不,JavaScript 无权访问 file input 字段中的文件。

    大多数解决方法都涉及某种 Flash 上传程序,例如 SWFUpload。有一些简洁的 HTML5 内容,但您将失去 50% 的 Internet 用户。

    【讨论】:

    • 为最好的而开发,为其余的而退后。什么是“整洁的 HTML5 东西”......你的意思是像 FileReader?
    • 请参阅 Gmail 的拖放上传器以获取示例。如果可能的话,我倾向于在不显着减少功能的情况下进行大多数开发。
    • 为现状万岁......通过推动信封前进,而不是等待它交付给您。
    • 除非有充分的理由,否则我不会花我老板的钱做两倍的工作来实现相同的功能。
    • 我说的不是花你老板的钱去做工作;我说的是按时、在预算范围内、在最前沿做到最好。这样做是因为你全身心地投入到你所做的事情中——时间会花在某个时间点上;现在或以后,对我来说没有任何区别。
    【解决方案4】:

    不。

    您不能 ajaxly 发布文件。

    看看这个问题,了解如何伪造它。

    How to fake ajax file upload?

    或者这个: How can I upload files asynchronously?

    【讨论】:

    • 不正确。如果浏览器支持 HTML5 文件 api,则可以使用 AJAX 将文件发送到服务器。
    • neato。我没见过。但是有多少浏览器支持呢?当然不是 IE 8,它可能仍然是最常用的浏览器。
    • 确实(目前)依赖它是不可行的。我只是说这是可能的。大声笑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2017-12-04
    • 2017-11-26
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多