Minio——上传10M图片文件失败

项目场景:

在安卓App有上传文件,文件接口是项目统一的。


问题描述:

提示:这里描述项目中遇到的问题:
安卓App内上传10M以下(只测试了10M左右的图片文件)图片文件可以正常上传,而超过10M就会抛出异常,用PostMan测试文件上传接口,一切正常!!!!!


原因分析:

1、partCount

在这里插入图片描述
异常抛出位置是 uploadId == null 条件内,我以为是partCount 异常导致的,因为抛异常的文件的 partCount=4 ,不会抛异常的文件的partCount = 1 ,结果不然,此属性是计算文件需要上传的次数。

2、Content-Type

继续往下追源码,发现底层是用的OkHttpClient。
在这里插入图片描述
继续往下走发现,请求居然是400

#报错:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InvalidRequest</Code>
<Message>Invalid Request</Message>
<Resource>/volunteer/2021/11/01/b4907d4a285946a8b38a10a99a45ffd8.jpg</Resource>
<RequestId></RequestId>
<HostId>f09dba8f-a590-40e3-aef5-397f294a3f83</HostId>
</Error>
Response{protocol=http/1.1, code=400, message=Bad Request, url=http://192.168.0.130:9000/volunteer/2021/11/01/b4907d4a285946a8b38a10a99a45ffd8.jpg?uploads=}
#

然后发现正常的文件请求和异常问文件请求的不同是没有携带upload参数,随后更换大文件发现此参数和异常并无关系。

最后,抓了4 次请求,得到了最后的结果。

# 40M 视频 —— PostMan测试,结果正常
Request{
method=POST, 
url=http://192.168.0.130:9000/volunteer/2021/11/01/d4dafc44df444c23a19b053bca7c9da4.mp4?uploads=, 
headers=[
Content-Type:video/mp4, 
Host:192.168.0.130:9000, 
Accept-Encoding:identity, 
User-Agent:MinIO (Windows 10; amd64) minio-java/8.3.0, 
Content-MD5:1B2M2Y8AsgTpgAmY7PhCfg==, 
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, 
x-amz-date:20211101T133019Z]}


# 11M 图片 —— PostMan测试,结果正常
Request{method=PUT,
 url=http://192.168.0.130:9000/volunteer/2021/11/01/4059780b5773416b9001e152e8160157.jpg, 
headers=[Content-Type:image/jpeg, 
Host:192.168.0.130:9000, 
Accept-Encoding:identity,
 User-Agent:MinIO (Windows 10; amd64) minio-java/8.3.0, 
Content-MD5:4mhgCUf0NDWO1JvO6hT4SQ==, 
x-amz-content-sha256:84958bb071116dc16a102e84ffc3d12dc4f29fb9ce487170a3ae0588ab608c47, 
x-amz-date:20211101T133354Z]}

# 11M 图片 —— APP 测试,结果异常
Request{method=POST, 
url=http://192.168.0.130:9000/volunteer/2021/11/01/77e484b6bb804535acad6cbb152d7b26.jpg?uploads=, 
headers=[
Content-Type:multipart/form-data, 
Host:192.168.0.130:9000, 
Accept-Encoding:identity, 
User-Agent:MinIO (Windows 10; amd64) minio-java/8.3.0, 
Content-MD5:1B2M2Y8AsgTpgAmY7PhCfg==, 
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, 
x-amz-date:20211101T133642Z]}

# 5M 图片 —— APP 测试,结果正常
Request{method=PUT, 
url=http://192.168.0.130:9000/volunteer/2021/11/01/1e5eaf7b7371447e905eaf4da096219f.jpg, 
headers=[
Content-Type:multipart/form-data, 
Host:192.168.0.130:9000, 
Accept-Encoding:identity, 
User-Agent:MinIO (Windows 10; amd64) minio-java/8.3.0, Content-MD5:LpgQJj5+50uPkurKKHHuNg==, 
x-amz-content-sha256:787b50c87e92a99a86c84b053ce95d51d2dd9142dad8fe5460ad540607be12bc, 
x-amz-date:20211101T134659Z]}

最后,定位问题在 请求头:Content-Type上,让安卓那边改掉请求头后,结果反馈正常。

MinioClient 在上传文件时,会根据文件的大小计算上传的次数,如果文件需要分批上传,则是使用Post请求,文件只需要一次上传,则使用Put请求。


解决方案:

将文件上传接口请求头Content-Type:multipart/form-data,替换问相应文件的类型即可。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值