JavaWeb开发——文件上传

打印 上一主题 下一主题

主题 1773|帖子 1773|积分 5319

#应用场景#

在创建网站页面的时间,
当我们需要在后端向前端发送图片等静态资源,我们无法将资源存储在本地来进行数据的传送。因此本期将会先容一种新的存储方式——云端存储以及其使用方法。
#情况预备#


1.我们将使用阿里云OSS作为云端仓库,需要创建阿里云账号并且获得accessKeyId和accessKeySecret。
2.在java项目中引入依靠
  1.         <dependency>
  2.             <groupId>com.aliyun.oss</groupId>
  3.             <artifactId>aliyun-sdk-oss</artifactId>
  4.             <version>3.17.4</version>
  5.         </dependency>
复制代码
3.创建AliOSSProperties记录所需上传的要素(这里通过yml文件的映射对类中的元素进行赋值)
  1. @Data    //为类中配备get和set方法
  2. @Component    //将bean放入IOC容器管理
  3. @ConfigurationProperties(prefix = "aliyun.oss")//YML文件的映射
  4. public class AliOSSProperties {
  5.     private String accessKeyId;
  6.     private String accessKeySecret;
  7.     private String bucketName;
  8.     private String endpoint;
  9. }
复制代码
4.创建Utils工具类
  1. @Component    //将bean放入IOC容器中管理
  2. public class AliOSSUtils {
  3.     private final AliOSSProperties aliOSSProperties;
  4.     @Autowired    //通过注入IOC容器中的Bean对象对本类中的aliOSSProperties进行赋值
  5.     public AliOSSUtils(AliOSSProperties aliOSSProperties) {
  6.         this.aliOSSProperties = aliOSSProperties;
  7.     }
  8.     /**
  9.      * 实现上传图片到OSS
  10.      */
  11.     public String upload(MultipartFile file) throws IOException {
  12.         // 获取上传的文件的输入流
  13.         InputStream inputStream = file.getInputStream();
  14.         // 避免文件覆盖
  15.         String originalFilename = file.getOriginalFilename();
  16.         String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
  17.         // 上传文件到 OSS
  18.         OSS ossClient = new OSSClientBuilder().build(
  19.                 aliOSSProperties.getEndpoint(),
  20.                 aliOSSProperties.getAccessKeyId(),
  21.                 aliOSSProperties.getAccessKeySecret()
  22.         );
  23.         ossClient.putObject(aliOSSProperties.getBucketName(), fileName, inputStream);
  24.         // 文件访问路径
  25.         String url = aliOSSProperties.getEndpoint().split("//")[0] + "//" +
  26.                 aliOSSProperties.getBucketName() + "." +
  27.                 aliOSSProperties.getEndpoint().split("//")[1] + "/" + fileName;
  28.         // 关闭ossClient
  29.         ossClient.shutdown();
  30.         return url; // 把上传到oss的路径返回
  31.     }
  32. }
复制代码
5.在uploadControlller层调用Utils方法
  1. @Slf4j
  2. @RestController
  3. public class UploadController {
  4.     @Autowired
  5.     AliOSSUtils aliOSSUtils;
  6.     @PostMapping("/upload")
  7.     public Result upload(MultipartFile image) throws IOException {
  8.         log.info("文件上传{}",image.getOriginalFilename());
  9.         //调用工具类
  10.         String url = aliOSSUtils.upload(image);
  11.         log.info("文件上传完成,文件url:",url);
  12.         return Result.success(url);
  13.     }
  14. }
复制代码
#自我反思#

1.UUID的使用

首先,UUID的使用并不需要引入依靠。UUID是一个可以直接通过import包来导入的随机数生成工具,在本次代码中,UUID的引入是为了解决存储文件时间,相同命名导致的文件复写题目。
2.yml配置文件

在Spring Boot项目中,通常使用application.yml文件来存储配置信息。Spring Boot会自动加载该文件中的配置,并将其映射到相应的配置类或情况变量中。
  1. # 应用程序的基本信息
  2. spring:
  3.   application:
  4.     name: my-application
  5. # 数据库配置
  6. spring:
  7.   datasource:
  8.     url: jdbc:mysql://localhost:3306/mydb
  9.     username: root
  10.     password: password
  11.     driver-class-name: com.mysql.cj.jdbc.Driver
  12. # 服务器配置
  13. server:
  14.   port: 8080
  15.   servlet:
  16.     context-path: /api
  17. # 日志配置
  18. logging:
  19.   level:
  20.     root: INFO
  21.     com.example: DEBUG
复制代码
这是一份yml配置文件我们可以使用两种方法来映射:
方法一使用@ConfigurationProperties注解将配置文件中的内容映射到Java类中
  1. import org.springframework.boot.context.properties.ConfigurationProperties;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. @ConfigurationProperties(prefix = "spring.datasource")
  5. public class DataSourceConfig {
  6.     private String url;
  7.     private String username;
  8.     private String password;
  9.     private String driverClassName;
  10. }
复制代码


  • 使用@Value注解直接注入配置值到字段中。
  1. import org.springframework.beans.factory.annotation.Value;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class AppConfig {
  5.     @Value("${server.port}")
  6.     private int port;
  7.     @Value("${spring.datasource.url}")
  8.     private String dbUrl;
  9. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表