1.问题描述以及原因分析
2.处理方式说明
2.1根据上传返回响应状态
2.2调用GetObject接口获取下文件的大小
1.问题描述以及原因分析
阿里云OSS上传图片功能很多人可能对实现过,正常情况下会返回https开头的图片地址.但是今天业务系统中运营人员反应上传的合同详情页面打开异常,看过服务端的日志之后发现用户上传的图片地址带有blob,线上返回异常图片地址如下:
造成这种的现象的原因就是服务端进行多个图片截取时处理异常,导致页面打开失败!现在说下问题处理方式.
2.处理方式说明
咨询过官方客服,反馈说正常情况下oss上传图片不会存在返回类似于blob:XXX
格式,提供的处理方式就是判断图片上传是否成功.这里阿里云OSS图片上传使用的是服务端sdk实现,先看下原始的图片上传逻辑:
public String uploadImg(MultipartFile[] multipartFiles) {
// 返回多张图片地址
String imgs="";
for (int i = 0; i < multipartFiles.length; i++) {
try {
String fileName = System.currentTimeMillis()+"_"+multipartFiles[i].getOriginalFilename();
String pathKey=filePath + fileName;
// bucketName表示阿里云OSS存储的配置信息:bucketName
ossClient.putObject("bucketName", pathKey, new ByteArrayInputStream(multipartFiles[i].getBytes()));
if(i < multipartFiles.length-1){
imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey+",";
}else {
imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey;
}
}
} catch (Exception e) {
log.error("图片上传失败:{}",e.getMessage());
throw new Exception("图片上传失败:"+e.getMessage());
}
}
return imgs;
}
关于图片地址是直接进行字符串拼接,没有和阿里云OSS服务进行请求交互,这里的意思可以理解为应用服务端接口请求完成,并不代表阿里云OSS服务端文件存储完成(客户端存在的情况可能是五花八门,无法全部复现),最稳妥的处理方式是请求一下阿里云OSS服务端判断已上传成功的文件与原始的文件是否相同,如果相同则认为是一次有效的上传操作.现在提供两种处理方式,可以根据情况进行选择(两种方式均展示核心上传逻辑).
// bucketName表示阿里云OSS存储的配置信息:bucketName
PutObjectResult putObjectResult = ossClient.putObject("bucketName", pathKey, new ByteArrayInputStream(multipartFiles[i].getBytes()));
if(putObjectResult.getResponse().getStatusCode()==200){
if(i < multipartFiles.length-1){
imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey+",";
}else {
imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey;
}
}
注意sdk版本需要升级到:3.15.0,依赖如下:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version>
</dependency>
文章来源:https://www.toymoban.com/news/detail-420332.html
// bucketName表示阿里云OSS存储的配置信息:bucketName
ossClient.putObject(aliyunConfig.getBucketName(), pathKey, new ByteArrayInputStream(multipartFiles[i].getBytes()));
ObjectMetadata objectMetadata = ossClient.getObject(aliyunConfig.getBucketName(), pathKey).getObjectMetadata();
// 判断已上传文件大小与原始上传文件大小是否相同
if (objectMetadata.getContentLength() == multipartFiles[i].getSize()) {
if(i < multipartFiles.length-1){
imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey+",";
}else {
imgs = imgs + aliyunConfig.getUrlPrefix() + pathKey;
}
}
以上是对于此问题的两种处理方式,这次处理之后经过一段时间测试暂时没有反馈异常的图片上传问题,如果感觉对你有帮助欢迎评论区留言或是点赞收藏!文章来源地址https://www.toymoban.com/news/detail-420332.html
到了这里,关于阿里云图片上传返回地址有blob格式问题处理实录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!