Angularjs + Cordova + UploadFile将Img转换为文件来执行POST

Angularjs + Cordova + UploadFile convert Img to file to do a POST

本文关键字:文件 POST 执行 Img Cordova UploadFile Angularjs 转换      更新时间:2023-09-26

我正在开发一个Cordova 3.3.0应用+ Angularjs.

我想做一个多部分POST。服务器正在等待文件,我不能上传base64字符串,我有存储在设备中的图像的真实路径。

如果我需要使用它,我也有base64图像。

cordova中不支持输入文件。显然,出于安全原因,我不能将值设置为输入文件。

所以我必须将或base64转换为文件,然后进行post。

//convert DOM img to file
var data ={
'lumen_moore_editar_usuario_rest[gender]':'M',
'lumen_moore_editar_usuario_rest[file]':file
          };
$http({url: WS_EDIT_USER, method: 'POST',
                data: $.param(data),
                transformRequest: angular.identity,
                headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
            }).success(function(data, status, headers, config) {
                    console.log("EDITAR IMAGEN SUCCESS "+ data);
                }).error(function(data, status, headers, config) {
                    console.log("EDITAR IMAGEN ERROR "+ data);
                });

有可能吗?我正在寻找很多这个答案,但不是运气,我不想使用FileTransfer。上传cordova.

对不起,我的英语不好。

谢谢!

我不得不使用Cordova FileTransfer,它在第一次工作。它被封装在一个带有承诺的服务中。

editProfileUserImg:function(imageURI){
            var deferred = $q.defer();

                            var options = new FileUploadOptions();
                            options.fileKey="file";
                            options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
                            var params = {};
                            options.params = params;
                            var headers={ 'Authorization':ACCESS_TOKEN.Authorization,
                                          'X-WSSE':ACCESS_TOKEN.XWSSE};
                            options.headers = headers;

                            var ft = new FileTransfer();
                            ft.upload(imageURI, encodeURI(WS_CHANCE_PIC_USER),
                                function(r){
                                    console.info("Code = " + r.responseCode);
                                    console.info("Response = " + r.response);
                                    console.info("Sent = " + r.bytesSent);
                                    deferred.resolve(r.response);
                                },
                                function(error){
                                    alert("An error has occurred: Code = " + error.code);
                                    console.error("upload error source " + error.source);
                                    console.error("upload error target " + error.target);
                                    deferred.reject(error);
                                }, options);

            return deferred.promise;
        }