当前位置: 首页 > 知识库问答 >
问题:

将上传文件放入AWS S3预先签名的url 2 Android

唐高卓
2023-03-14

我有一个从AWS S3预先签署的上传网址上传视频文件。在邮递员上测试视频成功上传。然而,我得到一个403返回时,实施改造。我无法对此任务使用多部分上传。

服务调用:

@Headers("Content-Type: video/mp4")
    @PUT
    fun uploadTaskAWS(@Url awsUrl: String, @Body filePart: RequestBody): Call<ResponseBody>

上传:

            val file = File(task.file_path)
            val requestFile = RequestBody.create(MediaType.parse("video/mp4"), file)
            val response = awsTaskUploadService.uploadTaskAWS(task.upload_url, requestFile)

我已经确保URL是正确的。内容类型标题也被添加,邮递员截图附后。得到403禁止错误

邮递员截图

我发现了这个相关的问题,但我仍然得到一个403。使用改造2 将文件上传到 AWS S3 预签名 URL

有什么建议吗?

共有2个答案

尹弘壮
2023-03-14

403错误意味着服务器知道您是谁,但没有执行所需操作的权限。

如果预签名 URL 已正确生成,则无需任何身份验证即可上传。

您可以检查默认情况下postman是否向请求添加任何AWS身份验证

如果上传到仅使用版本4的区域,您还需要在签署请求时显式设置协议版本。

酆勇
2023-03-14

解决方案是包括多部分并期望单个响应,而不是调用:

  @Multipart
    @PUT
    fun uploadAsset(
        @Header(CONTENT_TYPE) contentType: String,
        @Url uploadUrl: String,
        @Part file: MultipartBody.Part
    ): Single<ResponseBody>

其中contentType被传入

val requestFile = RequestBody.create(MediaType.parse(contentType), file)
val body = MultipartBody.Part.createFormData(mediaType, task.file_name, requestFile)
assetService.uploadAsset(contentType, task.upload_url, body)
 类似资料:
  • 我正试图通过一个预先签名的URL将一个文件上传到Amazon S3 bucket,这是我从第三个服务获得的。意思是,我没有生成这个URL。我已经阅读了AWS文档,但我不能把它们全部放在一起。这就是我指的。 预选。php 目前,我的代码是这样的。请注意,

  • 我试图使用angular客户端将文件上传到Amazon S3。我已经使用NodeJs应用服务器生成了一个预先签名的URL。在将文件上传到预先签名的URL时,我收到一个错误,如下所示: "对预检请求的响应没有通过权限改造检查:请求的资源上没有'Access-Control-Allow-Origin'标头。因此不允许访问Origin'http://localhost:4200'。" 我已将以下 COR

  • 问题内容: 我正在尝试使用预签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL,并将其作为JSON对象的一部分发送给我。我将URL作为字符串获取,如下所示: https://com-example-mysite.s3-us- east-1.amazonaws.com/userFolder/ImageName?X-Amz-Security- Token=xxfooxx%2F

  • 我已经使用我的后端代码生成了预先设计的URL,然后使用该URL上传了一个在会话期间录制的视频。我在前端使用下面的代码(React JS)来上传视频,预检似乎失败了,因为403禁止,post请求失败了,因为cors错误。请查看以下详细信息: 使用的代码: 控制台错误:访问“获取时间”https://xxxxxxxxxx“起源”http://localhost:5000'已被CORS策略阻止:对飞行前

  • 我上传一个文件到AmazonS3有问题。我开发了一个Grails RESTful服务,它使用AWS Java SDK生成预签名URL。当客户端上传一个文件时,它首先检索一个预签名的URL,然后使用这个将文件直接上传到我的S3 bucket。所以我有一个Grails服务,它创建了一个预签名的URL,如下所示...