Javascript XUL:直接上传到S3,但不使用文件输入元素

Javascript XUL:直接上传到S3,但不使用文件输入元素,javascript,amazon-web-services,amazon-s3,firefox-addon,xul,Javascript,Amazon Web Services,Amazon S3,Firefox Addon,Xul,我正在开发一个Firefox插件,它需要将图像从本地文件系统直接上传到S3 我可以在AWS中找到的示例,等等。解释如何使用用于图像传输的标准文件输入控件(与其他AWS特定的请求签名等一起,我已经很好地工作了)对网页执行此操作 但是,我找不到任何关于如何在不使用文件输入的情况下上载文件的信息,我知道文件的本地绝对路径(加载项在尝试上载到S3之前会将文件写入) 经过几个小时的尝试,找到了“正确”的方法,我想到了如下伪造文件输入: var fileInput = document.createE

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

我可以在AWS中找到的示例,等等。解释如何使用用于图像传输的标准文件输入控件(与其他AWS特定的请求签名等一起,我已经很好地工作了)对网页执行此操作

但是,我找不到任何关于如何在不使用文件输入的情况下上载文件的信息,我知道文件的本地绝对路径(加载项在尝试上载到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)-这一次,浏览器返回的内容而不是图像是文本
“[对象文件列表]”

我被难住了!我知道这与试图伪造文件输入有关。我相信应该有一种更干净、更正确的方法来使用兴奋剂


有人能告诉我如何解决这个问题吗?提前感谢。

chrome
code(又名特权代码),您只需使用以下路径调用文件构造函数即可构造DOM文件对象:

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

有关更多信息,请参阅:。

谢谢您的回答。我也试过了,因为这似乎是正确的方法(忘了在我的问题中包括它),但它不起作用。S3给了我错误
“MalformedPOSTRequest”
,只是为了确保:当使用文件输入而不是
新文件()时,完全相同的代码可以工作。
?请求在线路上有什么不同(控制台带有请求日志记录和/或网络面板,适用于懒惰者)。通过打开关于:newtab,顺便说一句,您将获得一个免费的
chrome
特权页面,包括所有开发工具和草稿行。。。可能比摆弄实际的附加代码更容易。;)DOM文件方法确实有效。这个错误是另一个错误(几分钟前刚刚解决了!)。我试图在将文件写入磁盘后很快将其上载(使用
nsIWebBrowserPersist.saveUri
)。我在上传之前引入了延迟,以确保文件被saveUri的编写器关闭(因为我在
nsIWebBrowserPersist
中找不到关闭方法)。是的,scratchpad确实是chrome环境的救命稻草。指针的Tks。