文件上传以及yml的配置

目录

一、存储本地

二、存储到阿里云

三、配置文件信息


一、存储本地

MultipartFile 常见方法:

  • String getOriginalFilename(); //获取原始文件名

  • void transferTo(File dest); //将接收的文件转存到磁盘文件中

  • long getSize(); //获取文件的大小,单位:字节

  • byte[] getBytes(); //获取文件内容的字节数组

  • InputStream getInputStream(); //获取接收到的文件内容的输入流

 保证每次上传文件时文件名都唯一的(使用UUID获取随机文件名)

 @PostMapping("/upload")
    public Result upload(String filename, Integer age, MultipartFile image) throws IOException {

            log.info("文件上传 :{},{},{} ",filename,age,image);

            // 文件的原始名字
            String oraginaFilename = image.getOriginalFilename();

            // 截取后缀
            String extneme = oraginaFilename.substring(oraginaFilename.lastIndexOf("."));
            // 名字用uuid
            String updateNmae = UUID.randomUUID().toString() + extneme;


            // 将文件保存到本地目录存
            image.transferTo(new File("D:/XXXX/" + updateNmae));

        return Result.success();
    }

二、存储到阿里云

引入阿里云OSS上传文件工具类(由官方的示例代码改造而来)

oss参考文档

文件上传以及yml的配置_第1张图片

package com.demo.tliaswebmanagement.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;

/**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {

    @Autowired
   private AliOSSProperties aliOSSProperties;

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {

        // 获取相关信息
        String endpoint = aliOSSProperties.getEndpoint();
        String accessKeyId = aliOSSProperties.getAccessKeyId();
        String accessKeySecret = aliOSSProperties.getAccessKeySecret();
        String bucketName = aliOSSProperties.getBucketName();


        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

阿里云属性类 

package com.demo.tliaswebmanagement.utils;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties("aliyun.oss")
public class AliOSSProperties {

    //区域
    private String endpoint;
    // 身份id
    private String accessKeyId;
    // 身份密钥
    private String accessKeySecret;
    // 存储空间
    private String bucketName ;


}

关于以上的这些阿里云相关配置信息,我们是直接写死在java代码中了(硬编码),如果我们在做项目时每涉及到一个第三方技术服务,就将其参数硬编码,那么在Java程序中会存在两个问题:

  1. 如果这些参数发生变化了,就必须在源程序代码中改动这些参数,然后需要重新进行代码的编译,将Java代码编译成class字节码文件再重新运行程序。(比较繁琐)

  2. 如果我们开发的是一个真实的企业级项目, Java类可能会有很多,如果将这些参数分散的定义在各个Java类当中,我们要修改一个参数值,我们就需要在众多的Java代码当中来定位到对应的位置,再来修改参数,修改完毕之后再重新编译再运行。(参数配置过于分散,是不方便集中的管理和维护)

controller类

注入文件上传的工具类

    @Autowired
    private AliOSSUtils aliOSSUtils;

    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException{

        // 通过工具类oss工具类上传文件并获取url
        String url = aliOSSUtils.upload(file);


        return Result.success(url);
    }

调试

文件上传以及yml的配置_第2张图片

三、配置文件信息

application.yml的配置信息

#数据库配置
spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/tlias
        username: root
        password: 123456

    servlet:
      multipart:
        max-file-size: 10MB
        max-request-size: 100MB

#mabits配置
mybatis:
    configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      map-underscore-to-camel-case: true

#oss存储配置
aliyun:
    oss:
      endpoint: https://oss-cn-guangzhou.aliyuncs.com  # 阿里云OSS域名 
      accessKeyId: xxxxxxxxxxxxxxxxx   # 用户身份ID 
      accessKeySecret: xxxxxxxxxxxxxxxxxxxx # 用户密钥 
      bucketName: web-198 # 存储空间的名字

你可能感兴趣的:(JavaWeb,java,spring,boot,mybatis,文件上传)