ionic开发项目,其中涉及到拍照上传文件,
按照官方的说法
第一步:配置
var options ={
quality:50,//相片质量0-100
destinationType:Camera.DestinationType.DATA_URL,// 返回类型:DATA_URL= 0,返回作为 base64 編碼字串。 FILE_URI=1
sourceType:Camera.PictureSourceType.CAMERA,//从哪里选择图片:PHOTOLIBRARY=0,相机拍照=1,SAVEDPHOTOALBUM=2。0和1其实都是本地图库
allowEdit:false,
encodingType:Camera.EncodingType.JPEG,//保存的图片格式: JPEG = 0, PNG = 1
targetWidth:200,
targetHeight:200,
mediaType:0,//可选媒体类型:圖片=0,只允许选择图片將返回指定DestinationType的参数。 // 視頻格式=1,允许选择视频,最终返回 FILE_URI。ALLMEDIA= 2,允许所有媒体类型的选择。
cameraDirection:0,//枪后摄像头类型:Back= 0,Front-facing = 1
popoverOptions:50,
saveToPhotoAlbum:true,
}
$cordovaFileTransfer.upload(encodeURI(url), imgData, options)
.then(function (result) {
console.log(JSON.stringify(result.response));
console.log("success");
}, function (err) {
console.log(JSON.stringify(err));
console.log("fail");
}, function (progress) {
// constant progress updates
});
参数说明:遇到的坑,后台就是不能接收到文件和参数,不管怎样都为空
原因:saveToPhotoAlbum
这个参数的意思是拍照之后将图像保存到相册,如果为false,就不保存。如果你写的false,恭喜你,掉坑里了。
cordova插件拍照上传的时候,会传一个文件路径,如果你不保存到本地,上传的时候,插件就找不到文件,服务器就会收到一个空,附带的参数也会一并未空,原理就是这样。
demo:
app.config ={
"ServiceRootPath":"http://blog.csdn.net/sixteen_cicle/",
"FileUploadPath":"FileServlet",
}
var ionLoading = function($ionicLoading, templateContent) {
$ionicLoading.show({
template : templateContent,
duration : 2000
});
};
var setImg = function()
{
amarPic.getPic($scope).then(function(){//amarPic angular 服务名
function(imagebase64)
{
console.log(imagebase64);
var options = new FileUploadOptions();//cordova标准
options.params = {"transCode": "salesman.app.uploadheadimg", "userid":"userid"};
options.fileKey = "imagebase64";
options.fileName = imagebase64;//传入图片文件
var url = encodeURI(AmApp.config.ServiceRootPath + AmApp.config.FileUploadPath);//uri编码
// $cordovaFileTransfer上传文件
$cordovaFileTransfer.upload(url,imagebase64,options)
.then(function(result){
// console.log(result);
// JSON 字符串 - js变量
var result = JSON.parse(result.response);
$ionicLoading.hide();//隐藏,移除的区别?
if(result.issuccess)
{
ionLoading($ionicLoading, "图片上传成功");
$scope.info.imagesrc = imagebase64;
}else{
ionLoading($ionicLoading, "图片上传失败");
}
},function(err){
$ionicLoading.hide();//隐藏,移除的区别?
ionLoading($ionicLoading, "图片上传失败");
},function(progress){
$ionicLoading.show({
template : "正在处理中",
});
});
}
},);
};