[英]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.