在遵循this tutorial之后,我尝试使用以下代码将离子应用程序中的图像上传到Amazon s3存储桶:
uploadFile(filePath) {
console.log('uploading: ', filePath);
this.getFile(filePath).subscribe((file) => {
console.log('file is', file);
this.s3.upload({
Key: file.name,
Bucket: this.bucketName,
Body: file,
ACL: 'public-read'
}, (err, data) => {
console.log('error', err);
console.log('data', data);
})
});
}
getFile(filePath):Observable<any> {
return Observable.create((obs) => {
(<any>window).resolveLocalFileSystemURL(filePath,(fileEntry) => {
fileEntry.file((fileObject) => {
obs.next(fileObject);
})
})
});
}
这可以正常连接到aws,但是它上传的文件只是其中带有[object object]
的文本文件,而不是jpeg图像数据。对于上下文,filePath
参数正在传递文件路径到通过Ionic 3 @ionic-native/camera
库生成的图像,如果有任何区别,我正在通过android仿真器运行代码。 / p>
我很确定在执行上传操作时,我将错误类型的对象传递给Body
属性,但是我不知道应该是什么。 AWS文档说它应该接受Blob
的类型,但是我的getFile
方法返回一个File
,它显然是Blob
的一个实例,所以我认为它应该可以正常工作?
答案 0 :(得分:1)
看起来像GetFile
方法返回File
对象,而不是Blob。
所以什么时候写:
Body: file,
您实际上是在传递那个JS对象,而不是Blob。
这是一个对象的证明是file.name
确实返回了名称。
我建议您查看fileEntry.file
的文档,以检查如何从返回的File
对象访问字节数组。
来自Cordova documentation:
file: Creates a File object containing file properties.
也许FileReader
会帮助您实际读取文件。
https://cordova.apache.org/docs/en/1.8.1/cordova/file/filereader/filereader.html