【发布时间】:2018-08-16 17:30:54
【问题描述】:
我想使用 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 时,我可以显示图像,但无法使用原始文件名创建所需的打字稿文件对象,以将图像附加到 Ionic 应用程序的上传服务上使用的 FormData。
看来我可以找到一种方法来使用来自 FILE_URI 的原始文件名和来自 DATA_URL 的 base64 编码数据使用cordova相机本机插件中的 camera.getPicture 创建这个打字稿文件对象。
将文件上传到我的后端的服务只是使用这种方法:
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.getPicture imageData 创建 File 对象的方法
【问题讨论】:
标签: angular typescript ionic3 cordova-plugins ionic-native