簡體   English   中英

從Javascript上傳文件

[英]Upload file from Javascript

我正在開發Javascript應用程序,需要使用Mediafire REST API上載文件。 (請參見此處的上傳教育)。

遵循此MDN教程和一些研究之后,我編寫了下面的代碼,但似乎沒有用...請注意,我暫時不需要控制進度,等等,我只想做最基本的上傳操作可能...

還要注意,我可以使用不同的代碼,甚至可以使用jQuery或其他(免費)庫,因此,如果您有更好的代碼來上傳文件,我將不勝感激。

var controller = this;
var file = $("#file").get(0).files[0];
//The file is correctly retrieved here...

var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://www.mediafire.com/api/upload/upload.php?session_token=' + controller.sessionToken.token);
//(The session_token is valid)
xhr.overrideMimeType('text/plain; charset=x-user-defined');
xhr.setRequestHeader('x-filesize', file.size);

var reader = new FileReader();
reader.onload = function (evt) {
  var uInt8Array = new Uint8Array(evt.target.result);
  //It seems that here the ArrayBuffer is read correctly, 
  //and I converted it to a ArrayBufferView because Chrome suggested it...
  xhr.send(uInt8Array);
};
reader.readAsArrayBuffer(file);

我不能說出具體的錯誤,我只知道什么也沒發生...但是也許看一下代碼,您會看到一些明顯的錯誤...我唯一看到的是在Chrome控制台中的錯誤:

在此處輸入圖片說明

在此處輸入圖片說明

注意:我知道這個問題的質量不是所期望的,而且太模糊了,但是我嘗試着盡我所能,因為我對所有這些技術都是全新的...

OPTIONS請求的存在以及OPTIONS請求中特定標頭的存在指示您的POST請求是跨域請求。 遵循CORS規范的用戶代理首先發送OPTIONS請求。 這也稱為預檢請求,在您的情況下,由於所包含的標頭(x-filesize)以及內容類型未經格式編碼,MPE或文本的事實,因此發送該請求/普通。 您可以在服務器端處理OPTIONS請求,也可以對您的請求進行適當的更改,這樣就不需要進行飛行前檢查。 無論哪種方式,您都將不得不在服務器端處理CORS請求,因為您顯然是在進行跨域請求。 您可以在這篇出色的MDN文章中了解有關CORS的更多信息。

PS:為什么在這里使用FileReader? 只需通過XHR發送File對象,或者更好的是,將File附加到FormData對象並發送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM