我从AWS S3有一个预先签名的上传URL,用于将视频文件上传到。在邮递员上测试,视频已成功上传。但是,当实施改造时,我得到了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。Upload a file to AWS S3 pre-signed URL using Retrofit2
有什么建议吗?
答案 0 :(得分:0)
403错误表示服务器知道您是谁,但无权执行所需的操作。
如果正确生成了预签名URL,则应该可以在没有任何身份验证的情况下进行上传。
您可以检查邮递员是否默认将任何AWS身份验证添加到请求中
如果上传到仅使用版本4的区域,则在签署请求时还需要显式设置协议版本。
答案 1 :(得分:0)
解决方案将包括多部分内容,并且期望单一响应而不是呼叫:
@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)