我试图保存使用Phonegap相机API拍摄的照片。该函数返回文件uri。当我保存它时,它直接保存字符串uri而不是文件。 我甚至尝试将内容类型指定为ajax头文件中的图像。给我一个破碎的链接。
function capturePhoto(){
//alert(address);
navigator.camera.getPicture(uploadPhoto,onFail,{sourceType:1,quality:60,destinationType: Camera.DestinationType.FILE_URI});
}
function uploadPhoto(data){
var serverUrl = 'https://api.parse.com/1/files/myphoto.jpg';
$.ajax({
type: "POST",
headers: {'X-Parse-Application-Id': PARSE_APP,
'X-Parse-REST-API-Key':PARSE_REST
// "Content-Type": "image/png"
},
url: serverUrl,
data: data,
processData: false,
contentType: false,
success:function(e){
console.log(e.url);
},
error:function(){
console.loh("ERROR");
}
});
}
答案 0 :(得分:0)
您需要使用destinationType: Camera.DestinationType.Native_URI
。这将返回图像在设备上的实际位置,通常类似于file://storage/0/sdcard/...
。然后,您可以使用此位置加载/发送/操作图像。
答案 1 :(得分:0)
您需要FileTransfer API来获取文件的内容。在uploadPhoto回调中插入以下内容:
function uploadPhoto(data){
var ft = new FileTransfer();
var options = new FileUploadOptions();
options.mimeType = "image/jpeg";
options.chunkedMode = false;
options.params = { // Any params you need...
};
ft.upload(data, 'https://api.parse.com/1/files/myphoto.jpg',
function (e) {
console.log('Success');
},
function (e) {
alert("Upload failed");
}, options);
}
您可能需要根据后端(未指定)更改某些选项和参数。 Christopher Coenraets有一个很好的video tutorial代码,其中包含如何执行此操作的代码。另一个解决方案是base64结果,在此设置您创建的图像的src为fileUri,然后将图像绘制到画布上并获取画布的dataUrl。此方法适用于旧版本的PhoneGap,但比使用FileTransfer API直接上传要慢得多。