无法在Ionic 4中将base64转换为图像路径

时间:2019-03-27 13:50:16

标签: ionic-framework ionic4

我正在使用Ionic 4应用程序,并且已使用相机插件上传图像,并且已将图像转换为用于显示图像的base64,但是问题是我无法将base64转换为正确的图像将其发送到API的路径。

这是我的 editimage.page.html

<ion-item class="newitem2">
    <ion-avatar class="image-center">
        <img name="profile_pic" [src]="this.userdetailsedit.value.profile_pic"/>
        <ion-icon (click)="presentActionSheet()" class="myicon11" name="create"></ion-icon>
    </ion-avatar> 
</ion-item>

这是我的 editprofile.page.ts

  async UpdateUserDetails(){
    this.storage.get('USER').then(userde => {
      if (userde) {
        this.userdetails = userde;
        const userdetailseditss = {
          first_name: this.userdetailsedit.value.first_name,
          last_name: this.userdetailsedit.value.last_name,
          mobile: this.userdetailsedit.value.mobile,
          profile_pic: this.userdetailsedit.value.profile_pic,
        };
        this.chakapi.UserProfileUpdate(userdetailseditss, 'userUpdateProfile/' + this.userdetails.id).subscribe((data) => {
          console.log(data);
        }, error => { 
          console.log(error); });
      }
    });
  }

  async imageuserchoose(sourceType){
    const options: CameraOptions = {
      quality: 76,
      sourceType: sourceType,
      destinationType: this.camera.DestinationType.FILE_URI,
      encodingType: this.camera.EncodingType.JPEG,
      mediaType: this.camera.MediaType.PICTURE,
      saveToPhotoAlbum: true,
      correctOrientation: true,
    }

    this.camera.getPicture(options).then((imageData) => {
    if (sourceType === this.camera.PictureSourceType.PHOTOLIBRARY) {
      let path = imageData.substring(0, imageData.lastIndexOf('/') + 1);
      let filename = imageData.substring(imageData.lastIndexOf('/') + 1);
      let index = filename.indexOf('?');
      if (index > -1) {
        filename = filename.substring(0,index);
      }
      this.file.readAsDataURL(path, filename).then(data => {
          this.imagepic = data;
          this.userdetailsedit.patchValue({
            profile_pic: data,
          });
      });
  }
  if (sourceType === this.camera.PictureSourceType.CAMERA) {

      let filename = imageData.substring(imageData.lastIndexOf('/') + 1);
      let path = imageData.substring(0, imageData.lastIndexOf('/') + 1);
      this.file.readAsDataURL(path, filename).then(data => {
          this.imagepic = data;
          this.userdetailsedit.patchValue({
            profile_pic: data,
          }); 
      });
  }
    }, (err) => {
    });
  }

  async presentActionSheet() {
    const actionSheet = await this.actionSheetController.create({
      header: 'Select Image Source',
      backdropDismiss:true,
      buttons: [{
        text: 'Choose From Gallery',
        icon: 'images',
        cssClass: 'myActionSheetBtnStyle',
        handler: () => {
          this.imageuserchoose(this.camera.PictureSourceType.PHOTOLIBRARY);
        }
      },
      {
        text: 'Use Camera',
        icon: 'camera',
        cssClass: 'myActionSheetBtnStyle',
        handler: () => {
          this.imageuserchoose(this.camera.PictureSourceType.CAMERA);
        }
      }]
    });
    await actionSheet.present();
  }
}

问题是,当我将图像发送到API时,它是base64,在发送之前我无法对其进行转换。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

请尝试这个。您可以为此使用文件传输本机插件。它将解决您的问题。

ts 文件中:

async UpdateUserDetails(){ 
   if(this.imagepic && this.fileUploadName) {
    let  fileTransfer = this.transfer.create();
    let options: FileUploadOptions = {
      fileKey: 'profile_pic',
      fileName: this.fileUploadName,
      headers: {}     
  }  
  options.params = {
    first_name: this.userdetailsedit.value.first_name,
    last_name: this.userdetailsedit.value.last_name,
    mobile: this.userdetailsedit.value.mobile,
    old_password:  this.userdetailsedit.value.old_password,
    password: this.userdetailsedit.value.password,    
  };
  this.storage.get('USER').then(userde => {
    if (userde) {
    this.userdetails = userde;
   fileTransfer.upload(this.imagepic, this.apiUrl+'userUpdateProfile/'+this.userdetails.id, options)
   .then((data) => {
     if(data && data.responseCode==200){
      let response=JSON.parse(data.response);
      if(response.status === "success"){
      this.storage.set('ID', response.data.id);
      this.storage.set('USER', response.data);
      this.modalController.dismiss();
      } else{
        loading2.dismiss();
      }
     }else{
       //show error msg  
     }
   }, (err) => {     
    console.log('upload err ::',err);
   });
  }
 });
}
}
async imageuserchoose(sourceType){
    const options: CameraOptions = {
      quality: 76,
      sourceType: sourceType,
      destinationType: this.camera.DestinationType.FILE_URI,
      encodingType: this.camera.EncodingType.JPEG,
      mediaType: this.camera.MediaType.PICTURE,
      saveToPhotoAlbum: true,
      correctOrientation: true,
      // allowEdit: true,
    }

    this.camera.getPicture(options).then((imageData) => {    
      let filename,path;
      this.imagepic = imageData;
        if (sourceType === this.camera.PictureSourceType.PHOTOLIBRARY) {
             path = imageData.substring(0, imageData.lastIndexOf('/') + 1);
             filename = imageData.substring(imageData.lastIndexOf('/') + 1);
            let index = filename.indexOf('?');     
            if (index > -1) {
              filename = filename.substring(0,index);
            }      
        }
        if (sourceType === this.camera.PictureSourceType.CAMERA) {
             filename = imageData.substring(imageData.lastIndexOf('/') + 1);
             path = imageData.substring(0, imageData.lastIndexOf('/') + 1);
            console.log(path,'FileName::', filename);            
        }
        this.fileUploadName=filename;
        this.file.readAsDataURL(path, filename).then(data => {          
          this.userdetailsedit.patchValue({
            profile_pic: data,
          }); 
      });
    }, (err) => {
     // Handle error
    });
  }

这将解决您的问题。