1

我必須使用離子項目中的多部分圖片上傳功能將圖片上傳到服務器。這裏是我的代碼,在ios上使用cordova-file-transfer插件進行多部分表格數據圖片上傳失敗

$scope.uploadImage = function(imageUrl) { 
     var fileName = imageUrl.substring(imageUrl.lastIndexOf('/')+1); 
     var json= { 
     "id":123, 
     "name" :fileName 
     } 
     var fileUploadOptions = new FileUploadOptions(); 
    fileUploadOptions.fileKey="file"; 
    fileUploadOptions.fileName = fileName; 
    fileUploadOptions.params = { 
     json : json 
    }; 
    fileUploadOptions.mimeType="image/jpeg"; 
    var URL = 'http://192.168.43.7:8080/services/uploadImage' 
    var encodedURI = encodeURI(URL); 
    console.log('fileUploadOptions : ',fileUploadOptions); 
    var ft = new FileTransfer(); 
    ft.upload(imageUrl, encodedURI, onSuccess, onError, fileUploadOptions, false); 

    function onSuccess(response){ 
     console.log('file uploaded: ',response); 
    } 
    function onError(error){ 
     console.log('upload failed',error); 
    } 
    } 

我使用以下插件

cordova-plugin-file
cordova-plugin-file-transfer
cordova-plugin-camera

我的圖像捕捉代碼是

$scope.takePhoto = function() { 

      var options = { 
       quality: 75, 
       destinationType: Camera.DestinationType.FILE_URI, 
       sourceType: 1, 
       allowEdit: false, 
       encodingType: 0, 
       targetWidth: 1280, 
       targetHeight: 720, 
       popoverOptions: CameraPopoverOptions, 
       direction: 1, 
       saveToPhotoAlbum: true 
      }; 

      var cameraSuccess = function(imageData) { 
       onPhotoURISuccess(imageData); 

       function onPhotoURISuccess(imageURI) { 
        createFileEntry(imageURI); 
       } 

       function createFileEntry(imageURI) { 
        window.resolveLocalFileSystemURL(imageURI, copyPhoto, fail); 
       } 

       function copyPhoto(fileEntry) { 
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSys) { 
         fileSys.root.getDirectory("photos", { create: true, exclusive: false }, function(dir) { 
          var fileName = 12 + "_" + 56 + "_" + 67 + ".jpg"; 
          fileEntry.copyTo(dir, fileName, onCopySuccess, fail); 
         }, fail); 
        }, fail); 
       } 

       function onCopySuccess(entry) { 
        console.log('Full path: ', JSON.stringify(entry)); 
        var path = entry.toURL(); 
        $scope.imageUrl = path; 
        console.log('imageUrl: ',$scope.imageUrl); 

       } 

       function fail(error) { 
        console.error(JSON.stringify(error)); 
        var cause = ""; 
        if (error.code == 20) { 
         cause = "Camera permission denied" 
        } 

       } 

      } 

      var cameraError = function(error) { 
       console.log('camera error: ', error); 
      } 
      navigator.camera.getPicture(cameraSuccess, cameraError, options); 



     } 

我傳遞了$scope.imageUrl變量上傳功能。

該代碼在Android設備上正常工作。 但iOS上傳失敗。

我得到我的服務器控制檯

​​

錯誤。

在我的設備的控制檯,我收到以下錯誤,

上傳失敗
體:「發生了錯誤,請與系統管理員聯繫。」 代碼:3 異常:空 HTTP_STATUS:500 源: 「文件:///var/mobile/Containers/Data/Application/8C4518AC-5606-4806-A8D2-216125EFE725/Documents/photos/12_56_57.jpg」 目標:「http://192.168.43.7:8080/services/uploadImage

錯誤正文中的消息來自我的服務器。 根據我從服務器得到的錯誤,我發現JSON部分沒有上傳到服務器。我試圖重新發布與郵遞員相同的問題,而不發送JSON對象。我得到了同樣的錯誤。

有誰知道這是什麼問題?爲什麼只有在iOS設備中有這個問題呢?

回答

4

從文檔:

PARAMS:一組可選的鍵/值對在HTTP請求通過。 (Object,key/value - DOMString)

嘗試使用fileUploadOptions.params = { json : JSON.stringify(json) }代替。

+0

非常感謝。您解決了最近3天困擾我的問題。 –

相關問題