行业知识
阿里云oss (批量)文件上传 Java SpringBoot
2026-10-26 19:40:17
来源:互联网转载
阿里云oss (批量)文件上传 Java SpringBoot
本文以Java单个上传文件或者批量上传文件为例,支持各种格式的文件上传,返回结果封装vo 类
()1、控制层controller
@PostMapping("/upload") public BaseResponse uploadMultipleFiles(@RequestParam("file") MultipartFile[] files) { // 检查是否有文件上传,如果没有则抛出业务异常 if (files.length == 0) { throw new BusinessException(ErrorCode.PARAMS_ERROR, "请至少上传一个文件"); } // 调用服务层方法处理文件上传,并获取上传结果 FileUploadResultVo fileUploadResultVo = userBackendService.uploadFile(files); // 返回包含上传结果的响应对象 return ResultUtils.success(fileUploadResultVo); } 2、业务层Service
FileUploadResultVo uploadFile(MultipartFile[] file);
@Override public FileUploadResultVo uploadFile(MultipartFile[] files) { if (files.length == 0) { throw new BusinessException(ErrorCode.PARAMS_ERROR, "请至少上传一个文件"); } // 初始化返回结果对象 FileUploadResultVo resultVO = new FileUploadResultVo(); // 成功上传的文件URL列表 List successUrls = new ArrayList(); // 未成功上传的文件原名列表 List failedFiles = new ArrayList(); // 总文件数量 int totalFiles = files.length; // 成功上传的文件计数 int successCount = 0; // 上传失败的文件计数 int failedCount = 0; // 遍历文件数组进行上传操作 for (MultipartFile file : files) { // 获取文件原始名称 String originalFilename = file.getOriginalFilename(); log.info("记录一下文件名字:" + originalFilename); // 检查文件是否为空 if (file.isEmpty()) { // 添加到失败列表 failedFiles.add(originalFilename); // 失败计数增加 failedCount++; continue; } // 上传文件,返回上传后的URL String uploadUrl = aliYunOssUtils.fileUpload(file); if (uploadUrl != null) { // 添加到成功URL列表 successUrls.add(uploadUrl); // 成功计数增加 successCount++; } else { // 添加到失败列表 failedFiles.add(originalFilename); // 失败计数增加 failedCount++; } } // 设置结果对象的属性 resultVO.setSuccessUrl(successUrls); resultVO.setFailedFiles(failedFiles); resultVO.setTotalFiles(totalFiles); resultVO.setSuccessfulCount(successCount); resultVO.setFailedCount(failedCount); // 返回包含所有上传结果信息的对象 return resultVO; } 3、阿里云工具类
/** * @param file 需要上传的文件 * @return * @description: 阿里云简单上传文件 * @author: lizhiwei * @date: 2024/1/9 13:42 **/ public String fileUpload(MultipartFile file) { // 阿里云OSS配置信息 String accessKeyId = aliyunOssConfig.getAccessKeyId(); String accessKeySecret = aliyunOssConfig.getAccessKeySecret(); String endPoint = aliyunOssConfig.getEndPoint(); String bucketName = aliyunOssConfig.getBucketName(); // 获取原始文件名 String originalFilename = file.getOriginalFilename(); // 获取文件扩展名 int dotIndex = originalFilename.lastIndexOf('.'); String extension = (dotIndex == -1) ? "" : originalFilename.substring(dotIndex + 1); // 生成文件存储的目标路径 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); String folderName = sdf.format(new Date()); String objectName = folderName + "/" + System.currentTimeMillis(); // 如果文件没有扩展名,则返回null if (extension.isEmpty()) { return null; } objectName += "." + extension; // 创建OSSClient实例 OSS ossClient; try { ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret); } catch (Exception e) { log.error("记录日志:创建ossClient实例失败,原因是:{}", e.getMessage()); throw new BusinessException(ErrorCode.SYSTEM_ERROR, "创建ossClient实例失败"); } // 上传文件到OSS try { // 获取文件输入流 try (InputStream fileInputStream = file.getInputStream()) { PutObjectResult result = ossClient.putObject(bucketName, objectName, fileInputStream); // 检查是否上传失败 if (result.getResponse() != null) { log.error("记录日志:上传失败:{}", result.getResponse().getErrorResponseAsString()); return null; } // 返回成功上传的文件URL return "https://" + bucketName + "." + URI.create(endPoint).getHost() + "/" + objectName; } } catch (IOException e) { log.error("记录日志:文件处理异常:{}", e.getMessage()); throw new BusinessException(ErrorCode.SYSTEM_ERROR, "文件处理异常"); } finally { // 关闭OSSClient if (ossClient != null) { ossClient.shutdown(); } } } 4、Vo类
@Data@AllArgsConstructor@NoArgsConstructorpublic class FileUploadResultVo { private List successUrl; private List failedFiles; private int totalFiles; private int successfulCount; private int failedCount;} 我封装了返回的Vo类,用于批量上传的时候显示哪些文件上传成功,哪些文件上传失败,如果上传失败返回该文件名称提示用户或管理员
返回的结果如下:
(){ "code": 0, "data": { "successUrl": [ "https://xxx.oss-cn-beijing.aliyuncs.com/202401/177447.txt", "https://xxx.oss-cn-beijing.aliyuncs.com/202401/1704787757519.pdf" ], "failedFiles": [ "xxxxxxx_失败文件名称" ], "totalFiles": 3, "successfulCount": 2, "failedCount": 1 }, "message": "ok"} 5、总结
本文完成了阿里云文件上传和批量文件上传,使用apifox可以使用body里面的form-data完成上传,注意批量上传的时候是使用一个file字段就行。
上一篇:程序怎么放入服务器?
下一篇:网站开发怎么学习?
最新文章
- Zol下载攻略,轻松获取所需资源!
- 做过饭店两三年,过来进厂工作一年多,但现在想找工作,而不知做什么工作,想做销售,文员,可因为自己没有经验,不敢去尝试,你们有什么建议呢
- 上过的课怎么排序?
- 揭秘复利盘源码,掌握财富增值的神秘力量!
- 一键重装Win10系统,轻松掌握系统重装指南
- 揭秘汉字奥秘,你不知道的衤字发音探索?
- 淘宝扭蛋机小程序开发:探索无限惊喜的购物新体验
- 云服务器怎么接受数据?
- 三十岁,因为带孩子脱岗一年半。以前毕业就到私企做了HR,一做就是五年。后来家里没人帮忙带孩子只能自己辞职带。现在孩子上幼儿园想着找工作。专员人家不要,有五年经验说我不稳定。做主管又嫌弃拖孩子,下班要早不出差不加班。现在天天发愁,像我这样的能做什么,还是学习其他技能?
- 安卓服务器怎么升级到鸿蒙?