【问题标题】:XUL: Direct upload to S3 but without using a file-input elementXUL:直接上传到 S3,但不使用文件输入元素
【发布时间】:2013-10-24 00:03:45
【问题描述】:

我正在开发一个 Firefox 插件,需要将图片从本地文件系统直接上传到 S3。

我可以在 AWS、SO 等中找到的示例解释了如何使用用于图像传输的标准文件输入控件(使用其他 AWS 特定请求签名等,我已经完美地工作了)为网页完成此操作)。

http://bencoe.tumblr.com/post/30685403088/browser-side-amazon-s3-uploads-using-cors

Uploading Image to Amazon s3 with HTML, javascript & jQuery with Ajax Request (No PHP)

http://aws.amazon.com/articles/1434

但是,我找不到关于如何使用文件输入上传文件的任何信息,我知道文件的本地绝对路径(插件本身会写出文件在尝试将其上传到 S3 之前)。

在尝试找到“正确”方式几个小时后,我想到了像下面这样伪造文件输入:

var fileInput = document.createElementNS("http://www.w3.org/1999/xhtml","input");
fileInput.setAttribute('type', 'file');
fileInput['files'] = [{
    mozFullPath: file.path,
    name: file.leafName,
    size: file.fileSize,
    type: 'image/gif' // testing only with gifs
}];

然后是 fd.append("file", fileInput.files[0]);,其中 fd 是我的 FormData 对象。然后通过 AJAX 将其发布到 s3。

这会将文件上传到 S3。但是,在浏览器中打开文件时,我得到的是文本 "undefined" 而不是图像。

然后我尝试了fd.append("file", fileInput.files); - 这次浏览器返回的内容而不是图像是文本"[object FileList]"

我被难住了!我知道这与试图伪造文件输入有关。我相信应该有一种更清洁、更正确的掺杂方式。

谁能告诉我如何解决这个问题?提前致谢。

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3 firefox-addon xul


    【解决方案1】:

    chrome 代码(又名特权代码),您可以简单地通过使用路径调用 File 构造函数来构造 DOM File 对象:

    var file = File("path/to/some/file");
    fd.append("file", file);
    

    欲了解更多信息,请参阅:Using the DOM File API in chrome code

    【讨论】:

    • 感谢您的回答。我也尝试过,因为这似乎是正确的方法(忘记将其包含在我的问题中),但效果不佳。 S3 给了我错误"MalformedPOSTRequest"
    • 只是为了确保:使用文件输入而不是 new File() 时,完全相同的代码是否有效?网络上的请求有何不同(带有请求日志记录的控制台和/或懒惰的网络面板)。您可以通过打开 about:newtab, BTW... 获得一个免费的chrome 特权页面,其中包括所有开发人员工具和 Scratchpad... 可能比摆弄实际的附加代码更容易。 ;)
    • DOM 文件方法确实有效。错误是另一个错误(几分钟前刚刚确定!)。我试图在将文件写入磁盘后过早上传文件(使用nsIWebBrowserPersist.saveUri)。我在上传之前引入了延迟,以确保文件被 saveUri 的作者关闭(因为我在nsIWebBrowserPersist 中找不到关闭方法)。
    • 是的,暂存器确实是 chrome 环境的救星。 Tks 的指针。
    猜你喜欢
    • 2011-06-29
    • 2014-08-11
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多