【问题标题】:AWS S3 file upload with retrofit2 video/image corrupt带有retrofit2视频/图像损坏的AWS S3文件上传
【发布时间】:2019-08-12 09:56:26
【问题描述】:

当使用改造上传成功上传文件到 s3 并返回 200 但文件已损坏。该文件可以是视频或图像。

 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)

其中 contentType 为“video/mp4”或“image/jpeg”,mediaType 为“video”或“image”

服务:

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

文件已上传且看起来正确,但它们已损坏且无法查看。

我已经检查了这个问题,但仍然卡住了。 AWS S3 Rest API with Android Retrofit V2 library, uploaded image is damaged

【问题讨论】:

  • 为什么不用s3 SDK上传?文档非常清楚如何做到这一点,而且比休息要好得多。
  • 我们正在使用与此问题类似的上传预签名网址,因此改装似乎很合适:stackoverflow.com/questions/45991720/…
  • 你是说每次你根据你的api响应上传到不同的桶?
  • 每个资产的不同上传网址。 URL 是正确的,我从呼叫中得到 200 响应,但是当我去查看 S3 上的视频/图像时,它们已损坏。错误必须在请求正文中

标签: android amazon-s3 kotlin retrofit retrofit2


【解决方案1】:

删除了分段上传并且它有效。

【讨论】:

  • 为什么我们需要从改造 API 调用中删除 multipart?.S3 会自动完成?
  • 我们的 api 为 S3 生成的 url 无法处理分段上传,因此通过删除它并作为 Body 上传它可以完美地工作
  • 您好,我也面临同样的问题?您是否从 ApiInterface 中删除了 multipart?
  • @DhruvKaushal 是的,我删除了 multipart 并且一切正常。我们的上传 url 不支持分段上传到 AWS。希望它对你有用!
【解决方案2】:

作为对@nt95 答案的改进和阐述,您正在使用多部分将文件发送到服务器,虽然似乎没有必要这样做,只需从所需文件中创建一个RequestBody 并将其作为@Body 在参数中。

代码无效:

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

工作代码:

val requestFile = RequestBody.create(MediaType.parse(contentType), file)

并将其传递给接口如下:

@PUT
fun uploadAsset(
@Header(CONTENT_TYPE) contentType: String,
@Url uploadUrl: String,
@Body file: RequestBody
): Single<ResponseBody>

你会没事的

【讨论】:

    猜你喜欢
    • 2020-04-15
    • 2015-11-14
    • 1970-01-01
    • 2022-08-13
    • 2015-12-16
    • 2020-01-29
    • 2018-01-16
    • 2019-05-28
    • 2016-04-14
    相关资源
    最近更新 更多