『博客开发日记』之修复文件上传失败时还返回成功的问题

本文最后更新于 2026年6月15日 下午

修复文件上传失败时还返回成功的问题


前言

在先前对上传接口的开发中

文件上传失败时(如oss崩溃,密钥没配好等情况)不直接返回失败而返回成功并带上临时文件路径

这是不对的

现在对其进行修复


代码实现

由于上传接口是前后台系统公用的

这样只需要修复上传接口和涉及到的类和方法就行了

下面直接贴修复的代码

OssFileServiceImpl 中的 uploadOss方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//将文件上传至oss
public String uploadOss(MultipartFile file, String filePath)
{
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.autoRegion());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = filePath;
try {
InputStream inputStream = file.getInputStream();
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
Response response = uploadManager.put(inputStream, key, upToken, null, null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
log.info("文件上传七牛云成功: key={}, hash={}", putRet.key, putRet.hash);
//返回图片的完整URL
return domain + key;
} catch (QiniuException ex) {
Response r = ex.response;
String errMsg = r == null ? ex.getMessage() : r.toString();
log.error("文件上传七牛云失败: key={}, error={}", key, errMsg, ex);
try {
if (r != null) {
log.error("七牛云错误响应: {}", r.bodyString());
}
} catch (QiniuException ex2) {
log.warn("读取七牛云错误响应失败", ex2);
}
throw new RuntimeException("上传失败");
} catch (Exception ex) {
log.error("文件上传七牛云异常: key={}", key, ex);
throw new RuntimeException("上传失败");
}
}

UploadServiceImpl 中的 uploadImage 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//公用的上传图片方法
@Override
public ResponseResult uploadImage(MultipartFile image)
{
//判断文件是否为空
if (image == null || image.isEmpty()) {
throw new SystemException(AppHttpCodeEnum.FILE_NULL);
}

//判断文件大小(限制2MB)
long maxSize = 2 * 1024 * 1024; // 2MB
if (image.getSize() > maxSize) {
throw new SystemException(AppHttpCodeEnum.FILE_SIZE_ERROR);
}

//判断文件类型
//获取原始文件名
String originalFilename = image.getOriginalFilename();
//判断文件名是否为png,jpg,gif,jpeg
if (!originalFilename.endsWith(".png") && !originalFilename.endsWith(".jpg") && !originalFilename.endsWith(".gif") && !originalFilename.endsWith(".jpeg")) {
throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
}

//上传到临时目录,文件路径格式:temp/yyyy/MM/dd/文件名.后缀
String filePath = OssFileConstants.TEMP_OSS_DIRECTORY_PATH_PREFIX + PathUtils.generateFilePath(originalFilename);
String url;
try {
url = ossFileService.uploadOss(image, filePath);
} catch (RuntimeException ex) {
throw new SystemException(AppHttpCodeEnum.FILE_UPLOAD_ERROR);
}

//将临时文件信息存入Redis,设置24小时过期时间
//存储格式:key=temp:file:文件路径, value=上传时间戳
redisCache.setCacheObject(RedisKeyConstants.TEMP_FILE_KEY_PREFIX + filePath, System.currentTimeMillis(), 24, TimeUnit.HOURS);

return ResponseResult.okResult(url);
}

添加一个上传失败的枚举

1
FILE_UPLOAD_ERROR(1023, "上传失败"),




PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记』之修复文件上传失败时还返回成功的问题
http://example.com/2026/06/14/『博客开发日记』之修复文件上传失败时还返回成功的问题/
作者
云梦泽
发布于
2026年6月14日
更新于
2026年6月15日
许可协议