【发布时间】: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