我必須使用離子項目中的多部分圖片上傳功能將圖片上傳到服務器。這裏是我的代碼,在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設備中有這個問題呢?
非常感謝。您解決了最近3天困擾我的問題。 –