我正在开发 cordova android app 。我必须通过 cordova捕获插件捕获图像并将其上传到服务器。我遇到的问题是,在上传高质量图像时,需要花费太多时间。我该如何解决这个问题?
这是客户端控制器。
navigator.camera.getPicture($scope.onPhotoDataGlrySuccess, $scope.onGlryFail, {
quality: 50,
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 200,
});
$scope.onPhotoDataGlrySuccess = function(imageData) {
//var image = document.getElementById('myImage');
$scope.imgsrc = imageData;
$scope.imgname = Date.now();
$scope.dataObj = {
img: $scope.imgsrc,
id: $scope.userid
}
dbServices.addImageToUserProfile($scope.dataObj).then(function(response) {
//$scope.img = 'data:image/jpeg;base64,' + response.data[0].user_image;
if(response.data[0].user_image){
$scope.img = 'data:image/jpeg;base64,' + response.data[0].user_image;
}
})
}
这是客户服务
this.addImageToUserProfile = function (data) {
return $http.post('/addimagetoProfile', {
img : data.img,
id : data.id
}).then(function(response){
return response;
})
}
这是服务器控制器
app.post('/addimagetoProfile', function(req, res) {
connection.query('UPDATE user SET user_image="' + req.body.img + '" WHERE id= ' + req.body.id + '', function(err, result) {
if (!err) {
//res.json(rows);
connection.query('select id,name,city,expertise,user_image from user where id = ' + req.body.id + '', function(err, rows, fields) {
if (!err) {
res.json(rows);
} else {
console.log(err);
}
})
} else {
console.log(err);
}
})
})
即使将质量设置为50(在捕获控制器中),也需要花费太多时间。 如何最小化上传时间,以便我可以通过将图片质量提高到80左右来上传图片。
将 base64 更改为图像文件,然后使用 angular-file-upload 上传到服务器可以解决此问题吗?如果是,那么我们如何将 base64 转换为图像文件。
答案 0 :(得分:0)
我已按以下方式使用此功能。 实际上发送base-64编码图像字符串总是比将文件上传到服务器更快。我建议你使用base-64编码。
navigator.camera.getPicture(onSuccess, onFail, { quality: 20,correctOrientation : true,targetWidth: 700,
targetHeight: 700,
destinationType: Camera.DestinationType.DATA_URL
});
function onSuccess(imageData) {
myImage = imageData; // variable my image will contain base-64 encoded image
}
质量,目标宽度和高度参数是可选的,您可以更改它们以满足您的要求