2013-10-09 66 views

回答

21

雖然試圖用FileTransfer()對機器人從一個phonegap應用上傳圖像傳輸到遠程服務器我一直得到一個錯誤代碼3上每隔一個文件上傳。

它工作過一次,但立即當我再次嘗試它會拋出一個錯誤,甚至沒有發送文件到服務器。

我使用的文件上傳的代碼是:

的關鍵在於使其工作是增加一個頭選項。

options.headers = { 
     Connection: "close" 
    } 
    options.chunkedMode = false; 


的完整代碼:

var options = new FileUploadOptions(); 

         options.fileKey="file"; 
         options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1); 
         options.mimeType="image/jpeg"; 
         options.chunkedMode = false; 
         *options.headers = { 
          Connection: "close" 
         };* 

         // setup parameters 
         var params = {}; 
         params.fullpath =imageURI; 
         params.name = options.fileName; 



         var ft = new FileTransfer(); 

         ft.upload(imageURI, encodeURI(url+'/account/profile-pics'), win, fail, options); 


function win(r) { 
        //file uploaded successfully 
       } 
      function fail(error) { 


       alert("An error has occurred: Code = " + error.code); 
       alert("upload error source " + error.source); 
       alert("upload error target " + error.target); 
      } 
+0

這是非常令人沮喪的是,這不是由phonegap更好地記錄。您的解決方案爲我工作,謝謝。 –

+1

我得到這個錯誤(錯誤代碼3),因爲Apache服務器上的php模塊上配置的文件大小比我作爲請求的一部分發布的小。一旦我增加了限制,它是固定的我。 –

+1

當互聯網斷開連接時,還會出現錯誤代碼3。 –

0

錯誤代碼3是一個相當寬的誤差;它基本上意味着您的服務器編碼不正確或者您沒有互聯網連接,並且導致連接錯誤。

可能意味着:

  1. 您沒有安裝在服務器上的多插件。在PHP中設置「file_uploads = On」(在PHP.ini中),在ExpressJS中,您需要Multer中間件插件(https://www.npmjs.com/package/multer)等。
  2. 文件上傳大於您的服務器允許的數量 - 導致狀態錯誤代碼413,其中「請求實體太大」的消息。爲了解決這個問題,你需要調整php.ini中的upload_max_filesize設置,爲了解決這個問題,你需要調整Multer等的limit字段。基本上,增加服務器上的文件上傳大小。大多數服務器將文件上傳大小限制爲安全措施。 (https://www.owasp.org/index.php/Unrestricted_File_Upload
  3. options.fileKey值(即<input type="file" name="fileKey" />)不是您的服務器期望的名稱 - 示例錯誤消息可能是「意外字段」。
  4. 表頭中的content-type字段沒有值multipart/form-data; boundary=----WebKitFormBoundary。記錄服務器上的請求標頭,可用於檢查內容類型是否設置正確。

上傳照片與文件傳輸

@AugieGardner - 也一致認爲,科爾多瓦文件傳輸的插件是不是有據可查上傳用相機插件拍攝的照片。

幸運的是,我有iOS的工作示例(和我的猜測是Android的爲好):
cordova file transfer plugin not working in ios simulator

上傳照片沒有文件傳輸

一個簡單的替代(或回退),將將圖像編碼爲Base64,並通過簡單的舊AJAX POST請求發送它。其中包括以下優點和缺點。Base64編碼的

缺點編碼發送的AJAX圖片

  1. 您可能需要增加服務器上的請求限制大小,這樣你就不會得到413個錯誤(即「請求實體太大」) 。
  2. Base64圖像比二進制圖像大大約37%,這很可能會導致上傳速度變慢。
  3. 可能不適用於視頻或其他文件類型。 Base64編碼的

優勢編碼發送過來AJAX

  1. 小應用程序的大小(和更快的應用程序下載)的圖像,因爲科爾多瓦的文件傳輸插件,並可能科爾多瓦的文件插件不會給應用程序添加開銷。
  2. 當您將應用擴展到新的操作系統(即iOS,Android等)時,您無需修復文件傳輸插件錯誤。
  3. 您可能不需要服務器上的多部分服務(或中間件)來上傳圖像。