当前位置:   article > 正文

阿里云上传文件

阿里云上传文件

目录

阿里云上传文件1(未分模块)

1、pom文件加入依赖

2、配置yam

3、引入工具类

4、Controller 文件上传

阿里云上传文件2(分模块)

1、定义OSS相关配置

2、读取OSS配置

3、生成OSS工具类对象

4、定义文件上传接口


阿里云上传文件1(未分模块)

1、pom文件加入依赖

  1. <!--阿里云 OSS 依赖-->
  2. <dependency>
  3. <groupId>com.aliyun.oss</groupId>
  4. <artifactId>aliyun-sdk-oss</artifactId>
  5. <version>3.15.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>javax.xml.bind</groupId>
  9. <artifactId>jaxb-api</artifactId>
  10. <version>2.3.1</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>javax.activation</groupId>
  14. <artifactId>activation</artifactId>
  15. <version>1.1.1</version>
  16. </dependency>
  17. <!-- no more than 2.3.3-->
  18. <dependency>
  19. <groupId>org.glassfish.jaxb</groupId>
  20. <artifactId>jaxb-runtime</artifactId>
  21. <version>2.3.3</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-configuration-processor</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.jetbrains</groupId>
  29. <artifactId>annotations</artifactId>
  30. <version>RELEASE</version>
  31. <scope>compile</scope>
  32. </dependency>

2、配置yam

这个写自己的身份id-密钥-桶名

  1. # 阿里云相关配置
  2. aliyun:
  3. oss:
  4. # 外网访问路径
  5. endpoint: http://oss-cn-beijing.aliyuncs.com
  6. # 身份id
  7. accessKeyId: LTAI5tS4GcnjVmnp
  8. # 密钥
  9. accessKeySecret: s2ioVYtO5bqhwluSJMvkx
  10. # 桶名
  11. bucketName: zsh33

3、引入工具类

  1. package com.zsh.springboot_webtwo.utils;
  2. import com.aliyun.oss.OSS;
  3. import com.aliyun.oss.OSSClientBuilder;
  4. import lombok.Data;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.stereotype.Component;
  8. import org.springframework.web.multipart.MultipartFile;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.util.UUID;
  12. @ConfigurationProperties(prefix = "aliyun.oss")
  13. @Data
  14. @Component
  15. public class AliOSSUtils {
  16. // @Value("${aliyun.oss.endpoint}")
  17. private String endpoint; // 外网访问路径
  18. // @Value("${aliyun.oss.accessKeyId}")
  19. private String accessKeyId; // 身份id
  20. // @Value("${aliyun.oss.accessKeySecret}")
  21. private String accessKeySecret; // 密钥
  22. // @Value("${aliyun.oss.bucketName}")
  23. private String bucketName; // 桶名
  24. /**
  25. * 实现上传图片到OSS
  26. */
  27. public String upload(@org.jetbrains.annotations.NotNull MultipartFile multipartFile) throws IOException {
  28. // 获取上传的文件的输入流
  29. InputStream inputStream = multipartFile.getInputStream();
  30. // 避免文件覆盖
  31. String originalFilename = multipartFile.getOriginalFilename();
  32. String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
  33. //上传文件到 OSS
  34. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  35. ossClient.putObject(bucketName, fileName, inputStream);
  36. //文件访问路径
  37. String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
  38. // 关闭ossClient
  39. ossClient.shutdown();
  40. return url;// 把上传到oss的路径返回
  41. }
  42. }

4、Controller 文件上传

  1. package com.zsh.springboot_webtwo.controller;
  2. import com.itheima.springboot_webtwo.utils.AliOSSUtils;
  3. import com.itheima.springboot_webtwo.utils.Result;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import org.springframework.web.multipart.MultipartFile;
  8. import java.io.IOException;
  9. @RestController
  10. public class UploadController {
  11. @Autowired
  12. private AliOSSUtils aliOSSUtils;
  13. @PostMapping("/upload")
  14. public Result upload(MultipartFile image) throws IOException {
  15. String url = aliOSSUtils.upload(image);
  16. return Result.success(url);
  17. }
  18. }

阿里云上传文件2(分模块)

1、定义OSS相关配置

在zsh-server模块

application-dev.yml

  1. zsh:
  2. alioss:
  3. endpoint: oss-cn-hangzhou.aliyuncs.com
  4. access-key-id: LTAI5tPeFLzsPPT8gG3LPW64
  5. access-key-secret: U6k1brOZ8gaOIXv3nXbulGTUzy6Pd7
  6. bucket-name: zsh-take-out

application.yml

  1. spring:
  2. profiles:
  3. active: dev #设置环境
  4. zsh:
  5. alioss:
  6. endpoint: oss-cn-beijing.aliyuncs.com
  7. access-key-id: LTAIGcnmnp
  8. access-key-secret: s2iohwOUMvkx
  9. bucket-name: zsh33

2、读取OSS配置

在zsh-common模块中,已定义

  1. package com.zsh.properties;
  2. import lombok.Data;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.stereotype.Component;
  5. @Component
  6. @ConfigurationProperties(prefix = "zsh.alioss")
  7. @Data
  8. public class AliOssProperties {
  9. private String endpoint;
  10. private String accessKeyId;
  11. private String accessKeySecret;
  12. private String bucketName;
  13. }

3、生成OSS工具类对象

在zsh-server模块

  1. package com.zsh.config;
  2. import com.zsh.properties.AliOssProperties;
  3. import com.zsh.utils.AliOssUtil;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. /**
  9. * 配置类,用于创建AliOssUtil对象
  10. */
  11. @Configuration
  12. @Slf4j
  13. public class OssConfiguration {
  14. @Bean
  15. @ConditionalOnMissingBean
  16. public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){
  17. log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);
  18. return new AliOssUtil(aliOssProperties.getEndpoint(),
  19. aliOssProperties.getAccessKeyId(),
  20. aliOssProperties.getAccessKeySecret(),
  21. aliOssProperties.getBucketName());
  22. }
  23. }

AliOssUtil.java在zsh-common模块中定义

  1. package com.zsh.utils;
  2. import com.aliyun.oss.ClientException;
  3. import com.aliyun.oss.OSS;
  4. import com.aliyun.oss.OSSClientBuilder;
  5. import com.aliyun.oss.OSSException;
  6. import lombok.AllArgsConstructor;
  7. import lombok.Data;
  8. import lombok.extern.slf4j.Slf4j;
  9. import java.io.ByteArrayInputStream;
  10. @Data
  11. @AllArgsConstructor
  12. @Slf4j
  13. public class AliOssUtil {
  14. private String endpoint;
  15. private String accessKeyId;
  16. private String accessKeySecret;
  17. private String bucketName;
  18. /**
  19. * 文件上传
  20. *
  21. * @param bytes
  22. * @param objectName
  23. * @return
  24. */
  25. public String upload(byte[] bytes, String objectName) {
  26. // 创建OSSClient实例。
  27. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  28. try {
  29. // 创建PutObject请求。
  30. ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
  31. } catch (OSSException oe) {
  32. System.out.println("Caught an OSSException, which means your request made it to OSS, "
  33. + "but was rejected with an error response for some reason.");
  34. System.out.println("Error Message:" + oe.getErrorMessage());
  35. System.out.println("Error Code:" + oe.getErrorCode());
  36. System.out.println("Request ID:" + oe.getRequestId());
  37. System.out.println("Host ID:" + oe.getHostId());
  38. } catch (ClientException ce) {
  39. System.out.println("Caught an ClientException, which means the client encountered "
  40. + "a serious internal problem while trying to communicate with OSS, "
  41. + "such as not being able to access the network.");
  42. System.out.println("Error Message:" + ce.getMessage());
  43. } finally {
  44. if (ossClient != null) {
  45. ossClient.shutdown();
  46. }
  47. }
  48. //文件访问路径规则 https://BucketName.Endpoint/ObjectName
  49. StringBuilder stringBuilder = new StringBuilder("https://");
  50. stringBuilder
  51. .append(bucketName)
  52. .append(".")
  53. .append(endpoint)
  54. .append("/")
  55. .append(objectName);
  56. log.info("文件上传到:{}", stringBuilder.toString());
  57. return stringBuilder.toString();
  58. }
  59. }

4、定义文件上传接口

在zsh-server模块中定义接口

  1. package com.zsh.controller.admin;
  2. import com.zsh.constant.MessageConstant;
  3. import com.zsh.result.Result;
  4. import com.zsh.utils.AliOssUtil;
  5. import io.swagger.annotations.Api;
  6. import io.swagger.annotations.ApiOperation;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.web.bind.annotation.PostMapping;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import org.springframework.web.multipart.MultipartFile;
  13. import java.io.IOException;
  14. import java.util.UUID;
  15. /**
  16. * 通用接口
  17. */
  18. @RestController
  19. @RequestMapping("/admin/common")
  20. @Api(tags = "通用接口")
  21. @Slf4j
  22. public class CommonController {
  23. @Autowired
  24. private AliOssUtil aliOssUtil;
  25. /**
  26. * 文件上传
  27. * @param file
  28. * @return
  29. */
  30. @PostMapping("/upload")
  31. @ApiOperation("文件上传")
  32. public Result<String> upload(MultipartFile file){
  33. log.info("文件上传:{}",file);
  34. try {
  35. //原始文件名
  36. String originalFilename = file.getOriginalFilename();
  37. //截取原始文件名的后缀 dfdfdf.png
  38. String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
  39. //构造新文件名称
  40. String objectName = UUID.randomUUID().toString() + extension;
  41. //文件的请求路径
  42. String filePath = aliOssUtil.upload(file.getBytes(), objectName);
  43. return Result.success(filePath);
  44. } catch (IOException e) {
  45. log.error("文件上传失败:{}", e);
  46. }
  47. return Result.error(MessageConstant.UPLOAD_FAILED);
  48. }
  49. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/419815
推荐阅读
相关标签
  

闽ICP备14008679号