簡體   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