我使用ionic 2开发cordova项目将base64发送到服务器图像已损坏

Posted

技术标签:

【中文标题】我使用ionic 2开发cordova项目将base64发送到服务器图像已损坏【英文标题】:I develop cordova project with ionic 2 send base64 to server the image is corrupted 【发布时间】:2017-09-22 08:40:54 【问题描述】:

我的目的是拍照并通过 ajax 调用发送到服务器 base64。我的问题是,当我将它发送到服务器并在浏览器上测试它时它已损坏,尽管它在设备上显示正常,而且这个问题仅在 ios android 上工作正常,当我发送 base64 时我可以在浏览器中打开它我的代码一张图:

takePicture(qidSide) 
    Camera.getPicture(
        destinationType: Camera.DestinationType.DATA_URL,
        targetWidth: 1000,
        quality: 25,
        targetHeight: 700
    ).then((imageData) => 
        // imageData is a base64 encoded string
        if (qidSide == 'front') 

            this.QIDfront = this._sanitizer.bypassSecurityTrustUrl("data:image/jpeg;base64,"+imageData);


         else 
            this.QIDback = this._sanitizer.bypassSecurityTrustUrl("data:image/jpeg;base64," + imageData);
        

    , (err) => 
        console.log(err);
    );

并发送到服务器

var jsonBody =  frontQID: this.QIDfront.changingThisBreaksApplicationSecurity, backQid: this.QIDback.changingThisBreaksApplicationSecurity ;
            this.xhrService.xhrCall( method: 'post', url: 'updateSignature', data: jsonBody  ).then(data => 

                let response: any = data;

            ).catch(err => 


            );

请任何人帮忙,因为我从 3 天开始就在这个问题上?

【问题讨论】:

【参考方案1】:

问题是我将base64作为纯字符串发送,这是错误的,任何url在发送到服务器之前都应该进行编码,解决方案是:

var jsonBody =  frontQID: encodeURIComponent(this.QIDfront.changingThisBreaksApplicationSecurity), backQid: encodeURIComponent(this.QIDback.changingThisBreaksApplicationSecurity) ;

并且在后端应该对其进行解码

【讨论】:

以上是关于我使用ionic 2开发cordova项目将base64发送到服务器图像已损坏的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 3是否可靠生产? [关闭]

Ionic iOS Cordova 推送令牌

构建vue+ionic+cordova项目,开发全平台APP

vue+cordova项目

如何将 Ionic Cordova 3 迁移到 Ionic Cordova 5?

FCM 推送通知在 android 中不起作用(使用 cordova-plugin-fcm 2.1.1 的 Ionic 项目)