• 微服务项目:尚融宝(21)(后端搭建:OSS文件上传整合2)


    认清现实,放弃幻想,准备斗争

    一、新建云存储微服务

    1、创建模块

    service-oss

    2、配置pom.xml

    1. <dependencies>
    2. <dependency>
    3. <groupId>com.atguigugroupId>
    4. <artifactId>service-baseartifactId>
    5. <version>0.0.1-SNAPSHOTversion>
    6. dependency>
    7. <dependency>
    8. <groupId>org.springframework.bootgroupId>
    9. <artifactId>spring-boot-starter-webartifactId>
    10. dependency>
    11. <dependency>
    12. <groupId>org.projectlombokgroupId>
    13. <artifactId>lombokartifactId>
    14. dependency>
    15. <dependency>
    16. <groupId>com.aliyun.ossgroupId>
    17. <artifactId>aliyun-sdk-ossartifactId>
    18. dependency>
    19. <dependency>
    20. <groupId>joda-timegroupId>
    21. <artifactId>joda-timeartifactId>
    22. dependency>
    23. <dependency>
    24. <groupId>org.springframework.bootgroupId>
    25. <artifactId>spring-boot-configuration-processorartifactId>
    26. <optional>trueoptional>
    27. dependency>
    28. dependencies>

     
       
            com.aliyun.oss
            aliyun-sdk-oss
       
     

    阿里云oss依赖

    3、配置application.yml 

    1. server:
    2. port: 8130 # 服务端口
    3. spring:
    4. profiles:
    5. active: dev # 环境设置
    6. application:
    7. name: service-oss # 服务名
    8. aliyun:
    9. oss:
    10. endpoint: 你的endponit
    11. keyId: 你的阿里云keyid
    12. keySecret: 你的阿里云keysecret
    13. bucketName: srb-file

     4、logback-spring.xml

    修改日志路径为 srb_log/oss

    5、创建启动类

    创建ServiceOssApplication.java
    1. @SpringBootApplication
    2. @ComponentScan({"com.atguigu.srb", "com.atguigu.common"})
    3. public class ServiceOssApplication {
    4. public static void main(String[] args) {
    5. SpringApplication.run(ServiceOssApplication.class, args);
    6. }
    7. }

    6、启动项目

    二、实现文件上传

    1、从配置文件读取常量

    创建常量读取工具类:OssProperties.java

    1. @Setter
    2. @Getter
    3. @Component
    4. @ConfigurationProperties(prefix = "aliyun.oss")
    5. public class OssProperties implements InitializingBean {
    6. private String endpoint;
    7. private String keyId;
    8. private String keySecret;
    9. private String bucketName;
    10. public static String ENDPOINT;
    11. public static String KEY_ID;
    12. public static String KEY_SECRET;
    13. public static String BUCKET_NAME;
    14. //当私有成员被赋值后,此方法自动被调用,从而初始化常量
    15. @Override
    16. public void afterPropertiesSet() throws Exception {
    17. ENDPOINT = endpoint;
    18. KEY_ID = keyId;
    19. KEY_SECRET = keySecret;
    20. BUCKET_NAME = bucketName;
    21. }
    22. }

    2、文件上传业务

    创建Service接口:FileService.java

    1. public interface FileService {
    2. /**
    3. * 文件上传至阿里云
    4. */
    5. String upload(InputStream inputStream, String module, String fileName);
    6. }
    实现:FileServiceImpl.java
    参考SDK中的:Java->上传文件->简单上传->流式上传->上传文件流
    1. @Service
    2. public class FileServiceImpl implements FileService {
    3. /**
    4. * 文件上传至阿里云
    5. */
    6. @Override
    7. public String upload(InputStream inputStream, String module, String fileName) {
    8. // 创建OSSClient实例。
    9. OSS ossClient = new OSSClientBuilder().build(
    10. OssProperties.ENDPOINT,
    11. OssProperties.KEY_ID,
    12. OssProperties.KEY_SECRET);
    13. //判断oss实例是否存在:如果不存在则创建,如果存在则获取
    14. if(!ossClient.doesBucketExist(OssProperties.BUCKET_NAME)){
    15. //创建bucket
    16. ossClient.createBucket(OssProperties.BUCKET_NAME);
    17. //设置oss实例的访问权限:公共读
    18. ossClient.setBucketAcl(OssProperties.BUCKET_NAME, CannedAccessControlList.PublicRead);
    19. }
    20. //构建日期路径:avatar/2019/02/26/文件名
    21. String folder = new DateTime().toString("yyyy/MM/dd");
    22. //文件名:uuid.扩展名
    23. fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
    24. //文件根路径
    25. String key = module + "/" + folder + "/" + fileName;
    26. //文件上传至阿里云
    27. ossClient.putObject(OssProperties.BUCKET_NAME, key, inputStream);
    28. // 关闭OSSClient。
    29. ossClient.shutdown();
    30. //阿里云文件绝对路径
    31. return "https://" + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/" + key;
    32. }
    33. }

     3、控制层

    创建controller.admin:FileController.java

    1. @Api(tags = "阿里云文件管理")
    2. @CrossOrigin //跨域
    3. @RestController
    4. @RequestMapping("/api/oss/file")
    5. public class FileController {
    6. @Resource
    7. private FileService fileService;
    8. /**
    9. * 文件上传
    10. */
    11. @ApiOperation("文件上传")
    12. @PostMapping("/upload")
    13. public R upload(
    14. @ApiParam(value = "文件", required = true)
    15. @RequestParam("file") MultipartFile file,
    16. @ApiParam(value = "模块", required = true)
    17. @RequestParam("module") String module) {
    18. try {
    19. InputStream inputStream = file.getInputStream();
    20. String originalFilename = file.getOriginalFilename();
    21. String uploadUrl = fileService.upload(inputStream, module, originalFilename);
    22. //返回r对象
    23. return R.ok().message("文件上传成功").data("url", uploadUrl);
    24. } catch (IOException e) {
    25. throw new BusinessException(ResponseEnum.UPLOAD_ERROR, e);
    26. }
    27. }
    28. }

    4、Swagger测试

    三、实现文件删除

    1、业务层

    Service接口:FileService.java

    1. /**
    2. * 根据路径删除文件
    3. * @param url
    4. */
    5. void removeFile(String url);

     实现:FileServiceImpl.java

    1. /**
    2. * 根据路径删除文件
    3. * @param url
    4. */
    5. @Override
    6. public void removeFile(String url) {
    7. // 创建OSSClient实例。
    8. OSS ossClient = new OSSClientBuilder().build(
    9. OssProperties.ENDPOINT,
    10. OssProperties.KEY_ID,
    11. OssProperties.KEY_SECRET);
    12. //文件名(服务器上的文件路径)
    13. String host = "https://" + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/";
    14. String objectName = url.substring(host.length());
    15. // 删除文件。
    16. ossClient.deleteObject(OssProperties.BUCKET_NAME, objectName);
    17. // 关闭OSSClient。
    18. ossClient.shutdown();
    19. }

    2、控制层

    1. @ApiOperation("删除OSS文件")
    2. @DeleteMapping("/remove")
    3. public R remove(
    4. @ApiParam(value = "要删除的文件路径", required = true)
    5. @RequestParam("url") String url) {
    6. fileService.removeFile(url);
    7. return R.ok().message("删除成功");
    8. }

  • 相关阅读:
    net-java-php-python-学生入学信息管理系统计算机毕业设计程序
    1. Tailwind CSS 简介
    【spark】spark使用sql读取elasticsearch es索引,使用keystore配置用户密码
    Unity解决:导出AndroidStudio工程 出现如下报错的解决方法
    产业互联网周报:滴滴被处以80亿元巨额罚款;消息称中国正启动欧洲企业到中国上市计划;字节跳动确认自研专用芯片...
    苹果电脑为什么无法删除U盘的文件?mac怎么删除移动硬盘里的文件
    ESP8266三种工作模式以及TCP/UDP服务
    线程池源码解析 4.runWorker() 方法
    从25到45岁,软件测试工程师如何发展自己的职业?
    Hadoop 2.x和Hadoop 3.x比较
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/126732223