嗨,当我尝试使用vue应用程序中预先指定的url将图像上传到我的amazon aws bucket时,我收到了400个错误请求。我已经成功生成了一个预先签名的url,但我无法使用它将图像发布到我的bucket。
获取预签名网址的路线
const express = require('express')
const router = new express.Router()
const requireAuth = require('../middleware/requireAuth')
router.use(requireAuth)
const v4 = require('uuid')
const AWS = require('aws-sdk')
const s3 = new AWS.S3({
region: process.env.BUCKET_REGION,
accessKeyId: process.env.ACCESS_KEY_ID,
secretAccessKey: process.env.SECRET_ACCESS_KEY
})
router.get('/upload', async (req, res) => {
const key = `${req.user._id}/${v4()}.jpeg`
s3.getSignedUrl('putObject', {
Bucket: 'my-post-app-bucket',
ContentType: 'image/jpeg',
Key: key
}, (err, url) => res.send({ key, url }))
})
module.exports = router
Vue client
<template>
<form @submit.prevent="handleSubmit">
<input type="file" @change="handleChange">
<button>add</button>
</form>
</template>
<script>
export default {
data(){
return {
file: ''
}
},
methods: {
handleChange(e){
this.file = e.target.files[0]
},
async handleSubmit(){
await this.$store.dispatch('images/uploadImage', this.file)
}
}
}
</script>
Vuex操作发布到预先指定的url
actions: {
async uploadImage(context, file){
try {
const res = await api.get('/upload', {
headers: {
Authorization: `Bearer ${localStorage.getItem('token')}`
}
})
await axios.put(res.data.url, file, {
headers: {
'Content-Type': file.type
}
})
}catch(err){
console.log(err.message)
context.commit('SET_ERROR', err.message, { root: true })
}
}
}
Aws CORS许可
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST"
],
"AllowedOrigins": [
"http://localhost:8080"
],
"ExposeHeaders": []
}
]
我得到“请求失败,状态代码400”错误。
几周前我遇到了类似的情况,下面是我如何解决的
const formData = new FormData();
Object.entries(fields).forEach(([key, value]) => {
formData.append(key, value);
});
formData.append('file', file.originFileObj);
axios.post(url, formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
})
字段
来自对generate_presigned_post的调用
file
是File
类型中的对象
您好,我正在尝试将客户的图片直接上传到reactjs web app中的amazon s3。我在后端生成预签名的url,如下所示 生成的url看起来像这样。 https://s3.us-west-1.amazonaws.com/churchapp-la/5/ab49d601efed40e0a6de0509ab78c091.png?ContentType=image/png 在客户端我这样做 当我点
当用户上传图片时,我正在动态调整图像大小。原始图片存储在Amazon S3上一个名为djangobucket的bucket中。在这个桶中,包含数千个文件夹。 每个文件夹都以用户命名。我不必担心存储桶创建或文件夹创建,因为所有这些都是从客户端处理的。 下图为: 如您所见,Bob有许多图片。一旦用户将图片上传到S3,我就会通过URL通过Django下载它,在这种情况下,它将是:http://s3.am
我已经阅读了安装https的amazon ec2指南并完成了几个步骤。但它仍然不起作用。 签一个SSL认证,我用的是自签名证书。 使用aws iam将SSL证书上传到亚马逊服务器。 在ec2控制平台中,在当前安全组的入站中添加端口80和端口443 创建新的负载均衡器,在新的负载均衡器中添加端口80、端口443和带有上传证书的https的超文本传输协议,并在负载均衡器中分配当前实例 最后,我检查了实
我正在尝试使用 java 对亚马逊 S3 进行分段上传。我正在使用下面链接中的代码。 http://docs.aws.amazon.com/AmazonS3/latest/dev/llJavaUploadFile.html 方案 1:要上载的文件大小为 31627。我使用 partSize 作为 500000 来指定单个部件的大小。 由于文件的大小小于部分大小,因此文件将上传到 S3。 方案 2:
但是我是亚马逊移动服务开发的新手,我不知道怎么做。 多谢了。
问题内容: 我有一个800KB的JPG文件。我尝试上传到S3,并不断收到超时错误。你能弄清楚哪里出了问题吗?800KB很小,无法上传。 错误消息:在超时期限内未读取或写入到服务器的套接字连接。空闲连接将关闭。 HTTP状态码:400 AWS错误代码:RequestTimeout 问题答案: IOUtils.toByteArray是否有可能正在耗尽您的输入流,以便在进行服务调用时不再需要从中读取任何