我想将照片上传到S3存储桶,我目前正在使用世博会并使用aws-ampl来接近这个。
获取本地图像的代码如下:
import { ImagePicker } from 'expo';
ImagePicker.launchImageLibraryAsync({
mediaTypes: 'Images',
allowsEditing: true,
aspect: [1, 1],
base64: true
})
.then(image => dispatch(pickImageSuccess(image)))
.catch(err => dispatch(piclImageFail(err)));
获取图像后,我通过{ Storage } from 'aws-amplify'
import { Storage } from 'aws-amplify';
const file = image.base64;
const imageName = image.uri.replace(/^.*[\\\/]/, '');
console.log(imageName);
const access = { level: "public", contentType: 'image/jepg' };
Storage.put(`${username}/${imageName}`, file, access)
.then(succ => console.log(succ))
.catch(err => console.log(err));
在 我上传了图片,我试图在S3存储桶中打开图像。图像无法正常打开,除非我在S3存储桶中将文件标记为公开,否则我无法公开访问图像。
答案 0 :(得分:1)
找出问题所在。来自Storage的put()方法需要blob作为参数。以下是我为实现这一目标所做的工作。
import { ImagePicker } from 'expo';
import mime from 'mime-types';
import { Storage } from 'aws-amplify';
const imageName = image.uri.replace(/^.*[\\\/]/, '');
const fileType = mime.lookup(image.uri);
const access = { level: "public", contentType: fileType, };
fetch(image.uri).then(response => {
response.blob()
.then(blob => {
Storage.put(`${username}/${imageName}`, blob, access)
.then(succ => console.log(succ))
.catch(err => console.log(err));
});
});