繁体   English   中英

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

[英]XUL: Direct upload to S3 but without using a file-input element

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

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

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

使用带有Ajax请求的HTML,javascript和jQuery将图像上传到Amazon s3(无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]"

我很难过! 我知道它与尝试伪造文件输入有关。 我相信应该有一种更清洁,更正确的方法。

任何人都可以解释我如何解决这个问题? 提前致谢。

chrome代码(也称为特权代码),您只需通过调用带有路径的File构造函数即可构建DOM File对象:

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

有关更多信息,请参阅: 在chrome代码中使用DOM File API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM