我想使用FormData将图像上传到我的后端,但由于Ionic DEVAPP和Ionic VIEW不支持文件,文件传输和文件上传插件,我需要只使用Angular Http或HttpClient来完成。
当使用DestinationType.FILE_URI时,我可以从文件中获取内部URL并将其显示在img对象上,但如果没有本机文件,文件路径和文件传输插件,我无法从该URL创建typescript File对象。
getImage() {
const options: CameraOptions = {
quality: 100,
destinationType: this.camera.DestinationType.FILE_URI,
sourceType: this.camera.PictureSourceType.PHOTOLIBRARY
}
this.camera.getPicture(options).then((imageData) => {
this.imageURI = this.sanitizer.bypassSecurityTrustUrl(imageData)
}, (err) => {
console.log(err)
this.presentToast(err)
})
字符串
}
使用此模板
<ion-content padding>
<ion-item>
<p>{{imageFileName}}</p>
<button ion-button color="secondary" (click)="getImage()">Get Image</button>
</ion-item>
<ion-item>
<h4>Image Preview</h4>
<img style="display:block" [src]="imageURI" *ngIf="imageURI" alt="Ionic File" width="300" />
</ion-item>
<ion-item>
<button ion-button (click)="uploadFile()">Upload</button>
</ion-item>
</ion-content>
型
当使用DestinationType.DATA_URL时,我可以显示图像,但无法创建原始文件名所需的typescript File对象,以将图像附加到我的Ionic App上传服务上使用的FormData。
似乎我可以找到一种方法来创建这个类型脚本文件对象与原始文件名从FILE_URI和一个base64编码的数据从DATA_URL使用camera.getPicture从cordova相机本机插件。
服务上传文件到我的后端只是使用这种方法:
postImage(image: File): Observable<any> {
const formData = new FormData()
.append('file', image, image.name)
}
return this.httpClient.post<any>(this.myUrl,formData)
}
型
来自组件myPage.ts的getImage和来自uploadservice.ts的postImage都可以正常工作,但是我找不到从camera创建File对象的方法。
3条答案
按热度按时间fykwrbwg1#
答案主要来自here,但适用于
@ionic-native/camera
插件getPicture
命令。字符串
需要注意的要点是
1.目标类型必须为
DATA_URL
1.必须将
data:image/jpeg;base64,
前置到imageData
t8e9dugd2#
我有同样的问题,并喜欢这个和它的作品为我。但有一件事要注意,我不显示选定的图像第一。上传后,只有其可见。
字符串
}
型
}
这是我的业务提供商
型
ef1yzkbh3#
如果你不想使用原生插件,你可以使用angular。在这种情况下,使用离子输入文件:
字符串
剩下的用angular:https://www.academind.com/learn/angular/snippets/angular-image-upload-made-easy/完成
您可以使用以下示例:
https://github.com/diegogplfree/Ionic3-fileupload-non-native的