小工具知识网

当前位置: 首页 > 行业知识 > 阿里云oss (批量)文件上传 Java SpringBoot

行业知识

阿里云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字段就行。

上一篇:程序怎么放入服务器?

下一篇:网站开发怎么学习?