Я пытаюсь загрузить общедоступные фотографии на стороне браузера в S3 Bucket.Я использую сервер для проверки подлинности моего запроса и предоставления браузеру подписанного URL-адреса.Мой оператор PUT работает, и в моем S3 Bucket будет добавлен новый объект.Метаданные поступают с «Content-Type»: application / json; charset = UTF-8.Несмотря на то, что я устанавливаю его в свой код как image / png.Кроме того, даже если я изменяю метаданные на «image / png», когда захожу по URL, чтобы просмотреть свое изображение, я вижу длинную строку текста, которая представляет собой данные, представляющие изображение, что-то вроде этого «[» data: image / png;base64, iVBORw0KGgoAAAANSUhEUgAAASQAAAEjCAYAAACb / HxUA], который продолжается около 26 000 символов.
Почему на странице отображается текст, а не изображение?
Вот мой код браузера для запроса:
axios.get('/picture', {params: { filename: `${this.props.user.id}_${Date.now()}`}})
.then(response =>{
var signedUrl = response.data;
var headers= {
'ACL': 'public-read',
'Content-Type': this.state.imageType,
};
return axios.put(signedUrl, this.state.imgSrc, headers);
})
Первый axios.get
- это запрос кполучить подписанный URL.
Вот код сервера для создания подписанного URL.
const s3 = new aws.S3({
region: 'us-east-2',
accessKeyId: process.env.ACCESS_KEY_ID,
secretAccessKey: process.env.SECRET_ACCESS_KEY,
});
router.get('/', (req,res)=>{
let params = {
Bucket: 'beerphotos',
Key: req.query.filename,
//Body : req.query.picture[0],
ACL: 'public-read',
ContentType: 'image/png',
Expires: 60,
}
s3.getSignedUrl('putObject', params, function(err, data) {
if (err) {
console.log('Error Getting Signed URL', err);
return err;
} else {
console.log('This is the data', data)
res.send(data);
}
})
})