SpringBoot整合阿里云Oss实现文件上传与下载

controller:

注:纯文件上传与配合下载的文件上传代码是相同的,改变接口名即可使用,只是service的返回值不同而已。

    @Resource
    OssFileService ossFileService;
    
    //上传的代码
    @PostMapping("/xxx")
    public String fileServiceUpload(@RequestParam(name = "file") MultipartFile file) throws IOException {
        log.info("upload upload start... ");
        String originalFilename = file.getOriginalFilename();
        String[] split = originalFilename.split("\\.");
        File tempFile = File.createTempFile(split[0], "." + split[1]);
        file.transferTo(tempFile);
        String result = "";
        try {
            String fileName = ossFileService.fileServiceUpload(tempFile);
            //删除临时文件
            tempFile.delete();
            if (!StringUtils.isBlank(fileName)) {
                return fileName;
            } else {
	            result = "上传失败";
            }
        } catch (Exception e) {
            result = "系统异常";
        }
        return result;
    }
    
    //下载的代码
    @PostMapping("/xxx")
    public File fileDownLoad(@RequestBody String fileName) throws IOException {
        JSONObject jsonObject = JSON.parseObject(fileName);
        String fileName1 = (String) jsonObject.get("fileName");
        return ossFileService.fileDownload(fileName1);
    }
    

OssFileService:

        String fileUpload(File file); //纯文件上传,返回一个供前端使用的url

        File  fileDownload(String fileName) throws IOException; //文件下载到本地

        String fileServiceUpload(File file); //配合文件下载使用的文件上传

OssFileServiceImpl:

@Service
public class OssFileServiceImpl implements OssFileService {
    private static final String accessKeyId = "你的阿里云的accessKeyId";
    private static final String accessKeySecret = "你的阿里云的accessKeySecret";
    private static final String bucket = "你的阿里云的bucket";
    private static final String endPoint = "你的阿里云的endPoint";

    @Override
    public String fileUpload(File file){
        // 创建OSSClient实例。
        OSS ossClient = new  OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
        try {
            //调用oss的putObject方法实现上传
            //第一个参数 Bucket名称
            //第二个参数,上传到oss文件路径和文件名称   A/B/图片.jpg
            //第三个参数,上传文件输入流
            //获取文件名称
            String fileName = file.getName();
            //1.文件名称添加一个唯一值
            String uuid = UUID.randomUUID().toString().replace("-", "");
            fileName = uuid + fileName;
            //2.把文件安装日期进行分类
            //2021/05/20/图片.jpg
            //获取当前日期 joda-time
            Date date = new Date();
            String datePath = new SimpleDateFormat("yyyy/MM/dd").format(date);
            fileName = datePath + "/" + fileName;
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, file);

            //上传文件
            ossClient.putObject(putObjectRequest);
            // 关闭OSSClient。
            ossClient.shutdown();
            //上传之后把文件路径返回
            String url = "https://" + bucket + "." + endPoint + "/" + fileName;
            return url;
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public File fileDownload(String fileName) throws IOException {
             File template = null;
            String[] split = fileName.split("\\.");
             template = File.createTempFile(split[0], split[1]);
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
        // 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。
        ossClient.getObject(new GetObjectRequest(bucket, fileName),template);
        // 关闭OSSClient。
        ossClient.shutdown();
        return template;
    }

    @Override
    public String fileServiceUpload(File file) {
        // 创建OSSClient实例。
        OSS ossClient = new  OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
        try {
            //调用oss的putObject方法实现上传
            //第一个参数 Bucket名称
            //第二个参数,上传到oss文件路径和文件名称   A/B/图片.jpg
            //第三个参数,上传文件输入流
            //获取文件名称
            String fileName = file.getName();
            //1.文件名称添加一个唯一值
            String uuid = UUID.randomUUID().toString().replace("-", "");
            fileName = uuid + fileName;
            //2.把文件安装日期进行分类
            //2021/05/20/图片.jpg
            //获取当前日期 joda-time
            Date date = new Date();
            String datePath = new SimpleDateFormat("yyyy/MM/dd").format(date);
            fileName = datePath + "/" + fileName;
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, file);
            //上传文件
            ossClient.putObject(putObjectRequest);
            // 关闭OSSClient。
            ossClient.shutdown();
            //返回文件名以便后续下载使用
            return fileName;
        } catch (Exception e) {
            return null;
        }
    }
}

测试

通过postman form-data去测上传
在这里插入图片描述

通过postman raw传json去测下载
在这里插入图片描述

**官方java sdk文档地址:**https://help.aliyun.com/document_detail/32007.html


版权声明:本文为ls_wifi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。