Base64图像花费太多时间上传到服务器

时间:2015-09-01 11:10:38

标签: android angularjs cordova cordova-plugins

我正在开发 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 转换为图像文件。

1 个答案:

答案 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

        }

质量,目标宽度和高度参数是可选的,您可以更改它们以满足您的要求