通过 javascript AWS sdk 将图像上传到 S3 会产生“[object object]”字符串
uploading an image to S3 via javascript AWS sdk results in '[object object]' string
通过关注 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 模拟器生成的代码,如果这有什么不同的话。
我很确定我在上传时向 Body
属性 传递了错误类型的对象,但我不知道它应该是什么. AWS 文档说它应该接受 Blob
的类型,但是我的 getFile
方法 returns a File
显然是 Blob
的一个实例,所以我想应该没问题吧?
看起来 GetFile
方法 return 是一个 File
对象而不是 blob。
所以什么时候,你写:
Body: file,
您实际上传递的是 JS 对象,而不是 blob。
这是一个对象的证据是 file.name
实际上 return 一个名字。
我建议您查看 fileEntry.file
的文档,了解如何从 File
对象访问字节数组 returned.
来自科尔多瓦documentation:
file: Creates a File object containing file properties.
也许 FileReader
会帮助您真正阅读该文件。
https://cordova.apache.org/docs/en/1.8.1/cordova/file/filereader/filereader.html
通过关注 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 模拟器生成的代码,如果这有什么不同的话。
我很确定我在上传时向 Body
属性 传递了错误类型的对象,但我不知道它应该是什么. AWS 文档说它应该接受 Blob
的类型,但是我的 getFile
方法 returns a File
显然是 Blob
的一个实例,所以我想应该没问题吧?
看起来 GetFile
方法 return 是一个 File
对象而不是 blob。
所以什么时候,你写:
Body: file,
您实际上传递的是 JS 对象,而不是 blob。
这是一个对象的证据是 file.name
实际上 return 一个名字。
我建议您查看 fileEntry.file
的文档,了解如何从 File
对象访问字节数组 returned.
来自科尔多瓦documentation:
file: Creates a File object containing file properties.
也许 FileReader
会帮助您真正阅读该文件。
https://cordova.apache.org/docs/en/1.8.1/cordova/file/filereader/filereader.html