一.本地存储
(一)基础知识
(二)代码
@GetMapping("/upload")
public Result upload(MultipartFile image) throws Exception{
log.info("文件上传:{}",image);
/**
* 1.获取原文件名 ——> 1.jpg、123.0.0.jpg
*/
String originalFilename = image.getOriginalFilename();
/**
* 2.构造唯一的文件名(不重复)——> uuid(通用唯一识别码)
*/
int index = originalFilename.lastIndexOf(".");
String extname = originalFilename.substring(index);
String newFileName = UUID.randomUUID().toString() + extname;
/**
* 3.将文件存储在服务器的磁盘目录中 E:\images
*/
image.transferTo(new File("E:\\images\\" + newFileName));
return Result.success();
}
(三) 配置文件优化
#配置单个文件上传大小限制
spring.servlet.multipart.max-file-size=10MB
#配置单个请求上传多个文件的大小限制
spring.servlet.multipart.max-request-size=100MB
二.阿里云OSS存储
(一)步骤
1.注册阿里云(实名认证)
2.充值(新用户可以体验三个月)
3.开通对象存储(OSS)
4.创建bucket
唯一注意的是更改读写权限为:公共读
其他的如果没有自己想搞的功能,则默认即可
5.获取AccessKey(密钥)
点击右上角头像 —— 点击AccessKey管理 —— 创建AccesKey
【注意】
目前AccessKey Secret (即密码)已经无法二次查看,所以在创建的时候,务必要保存好 AccessKey Secret
6.参照官方SDK编写入门程序
导入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关依赖示例代码如下:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
7.案例集成OSS
阿里云工具类代码
/**
* 阿里云 OSS 工具类
*/
@Component
public class AliOSSUtils {
// 根据自动的OSS修改自己的下面的四个属性
// 地域节点
private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
// bucketId
private String accessKeyId = "LTAI5tPhbTZAmpuC4";
// buck密码
private String accessKeySecret = "Iwhgf2lQF4guKYr5hZPPd5H";
// buck名称
private String bucketName = "web-vuespringboot";
/**
* 实现上传图片到OSS
*/
public String upload(MultipartFile file) throws IOException {
// 获取上传的文件的输入流
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();
// 把上传到oss的路径返回
return url;
}
}
实现类
//阿里云OOS
@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
log.info("文件上传,文件名字:{}", image.getOriginalFilename());
//调用阿里云OSS工具类进行文件上传
String url = aliOSSUtils.upload(image);
log.info("文件上传完成,文件访问的url:{}", url);
return Result.success(url);
}