首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >post请求不用于将文件上载到S3预签名的URL,而是使用角HttpClient放置文件。

post请求不用于将文件上载到S3预签名的URL,而是使用角HttpClient放置文件。
EN

Stack Overflow用户
提问于 2019-12-25 21:29:28
回答 1查看 497关注 0票数 1

我想上传文件到S3预签名的网址,我已经产生了使用我的后端应用程序。对于前端,我使用的是角HttpClient v8.2.9,当我使用put请求时,它正在工作,代码如下所示。

代码语言:javascript
运行
复制
const formData = new FormData();
           formData.append('file', file, file.name);
           this.http.put(preSignedUrl, formData, {
             responseType: 'text'
           }).subscribe(respond => {
                 console.log('__________OK_________');
                 console.log(respond);
               },
               error => {
                 console.log('__________ERROR_________');
                 console.log(error);
               });

但是当我使用post请求时,我总是会发现一个错误:

我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。

请求邮寄的鳕鱼会是这样的。

代码语言:javascript
运行
复制
const formData = new FormData();
           formData.append('file', file, file.name);
           this.http.post(preSignedUrl, formData, {
             responseType: 'text'
           }).subscribe(respond => {
                 console.log('__________OK_________');
                 console.log(respond);
               },
               error => {
                 console.log('__________ERROR_________');
                 console.log(error);
               });
         });

由于生成的预签名URL也可以用于我自己的微服务,它可以通过post请求接收文件,所以我不能使用amazon库在前端上传文件,而且必须是一般的。上面的post请求的例子是使用我的微服务,我对此很满意,我也想让S3和这个帖子一起工作。因此,我不需要改变我的请求,根据我要上传到哪里。

下面是我的java后端的代码,我为S3生成了预签名的URL。

代码语言:javascript
运行
复制
AmazonS3 s3client = makeClient();
                Date expirationTime = calculateExpirationTime();
                GeneratePresignedUrlRequest generatePresignedUrlRequest =
                        new GeneratePresignedUrlRequest(bucketName, fullPath, HttpMethod.PUT);
                                    generatePresignedUrlRequest.setExpiration(expirationTime);

                return s3client.generatePresignedUrl(generatePresignedUrlRequest).toString();

如果我将HttpMethod的后端代码更改为POST,我也会得到相同的错误,并将请求放在前端将无法工作。

EN

回答 1

Stack Overflow用户

发布于 2019-12-30 18:26:27

我想我又发现了问题所在。如果其他人有这个问题,我就把它发到这里。如果我们查看s3 SDK的文档。要生成一个预先签名的URL,我们不能使用POST。

* @param方法*当使用预签名的URL时,将在*请求中使用的HTTP方法(GET、PUT、DELETE、HEAD)。

所以在我的情况下放是最合适的。

我还找到了下面的链接https://www.intelliware.com/submitting-a-multipart-request-multipartform-data-using-put-and-spring-boot/

上面写着

spring引导只期望将多部分/窗体数据作为POST请求的一部分。

因此,我需要做的是,我需要覆盖spring方法来接受put多部分上传请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59481968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档