报错
io.minio.errors.ErrorResponseException: Invalid Request
at io.minio.MinioClient.execute(MinioClient.java:1201)
at io.minio.MinioClient.executePost(MinioClient.java:1348)
at io.minio.MinioClient.initMultipartUpload(MinioClient.java:4318)
at io.minio.MinioClient.putObject(MinioClient.java:3754)
at io.minio.MinioClient.putObject(MinioClient.java:3383)
at cn.qgos.web.file.utils.FileUploader.putObject(FileUploader.java:171)
at cn.qgos.web.file.utils.FileUploader.upload(FileUploader.java:128)
at cn.qgos.web.file.controller.FileController.uploadList(FileController.java:152)
...
但也找到的报错的位置,但我用postman走接口上传文件都是正常的。
但是安卓调接口上传就报这个错,百度也百度不到解决办法。
解决办法
通过debug发现,postman上传的文件的Content-Type
是image/jpeg
,而安装上传的文件的Content-Type
是multipart/form-data
,然后代码走到调用上传接口就报错。
报错代码:
// 上传文件
this.putObject(BUCKET_NAME, uploadName, is, contentType);
minio源代码:
public void putObject(String bucketName, String objectName, InputStream stream, String contentType)
throws InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, IOException,
InvalidKeyException, NoResponseException, XmlPullParserException, ErrorResponseException,
InternalException,
InvalidArgumentException, InsufficientDataException {
// Set the contentType
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Content-Type", contentType);
// 真正上传size赋值null
putObject(bucketName, objectName, null, new BufferedInputStream(stream), headerMap);
}
调用上传参数size直接赋值null,到这步就报错了,直接postman好使,但安卓端调用接口不好使,安卓不愿意改,只能我改咯。
修改后代码:
// 上传文件
this.putObject(BUCKET_NAME, uploadName, is,baseSize, contentType);
通过file拿到文件size,传size参,然后就好使了,估计安卓端还是配置有问题,但人家不愿意改,我也没办法。