购买/试用阿里云OSS
1.进入阿里云官网,首页选择产品阿里云权益中心_助力学生、开发者、企业用云快速上云-阿里云 (aliyun.com)
在产品类别->选择存储
2.点击存储选基础存储服务
3.点击对象存储oss
4.购买之后创建创建 AccessKey
5.创建之后截屏或复制保存
6.进入控制台创建Bucket
7.进入你的bucket
8.选择上传文件
9.扫描文件上传
10.oss文档快速上手
对象存储(OSS)-阿里云帮助中心 (aliyun.com)
在SpringBoot项目中使用OSS存储
1.安装OSS Java SDK对象存储
如果你使用的是 使用Java 1.7.0 到 Java 9之前版本则导入这个jar包即可
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
如果你的Java版本是 9之后则需要在导入这三个jar包
<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>
2.Controller层建一个测试
这个uuid用来生成图片不重复名称
package com.lu.tlias84.controller;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.lu.tlias84.utils.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.UUID;
@RestController
@RequestMapping("/upload")
@Slf4j
public class UploadController {
/**
* springboot封装用于接受文件的对象
* @param file
* @return
* @throws Exception
*/
@PostMapping
public ResultUtil upload(MultipartFile file) throws Exception {
//获取参数名
log.info("{}",file.getName());
//获取实际上传文件
log.info("{}",file.getOriginalFilename());
//拆分文件后缀(类型)
String filename = file.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf("."));
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";//阿里云oss访问路径
//生成不重复id
String uuid = UUID.randomUUID().toString();
String bucketName = "count-c";//填写bucket名称
String objectName = uuid + suffix; // 创建OSSClient实例。
//将文件转移到oss
//创建oss实力 要指定访问密钥
OSS ossClient = new OSSClientBuilder().build(endpoint,"你自己的",
"你自己的");
ossClient.putObject(bucketName, objectName, file.getInputStream());
String url = "https://" + bucketName + ".oss-cn-hangzhou.aliyuncs.com/" + objectName;
return ResultUtil.success(new StringBuilder(url));
}
}
3.把以上步骤封装成一个工具类
package com.lu.tlias84.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;
public class OssUtils {
private OssUtils() {
}
private final static String KEYED = "你自己的ID";
private final static String KEY = "你自己的密钥";
/**
* 阿里云访问路径这个是杭州的你要选择自己的
*/
private final static String ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";
/**
* 这里填你自己的bucket
*/
private final static String BUCKETNAME = "count-t";
/**
* springboot封装用于接受文件的对象
* @param file 传过来的数据
* @return URL
*/
public static String URL(MultipartFile file) {
String filename = file.getOriginalFilename();
if (Objects.nonNull(filename)) {
String suffix = filename.substring(filename.lastIndexOf("."));
String uuid = UUID.randomUUID().toString();//生成不重复id;
String objectName = uuid + suffix;
OSS ossClient = new OSSClientBuilder().build(ENDPOINT, KEYED, KEY);//创建oss实例指定访问密钥
try {
ossClient.putObject(BUCKETNAME, objectName, file.getInputStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
return "https://" + BUCKETNAME + ".oss-cn-hangzhou.aliyuncs.com/" + objectName;//返回的URL
}
return "file不能为空";
}
}
调用测试
package com.lu.tlias84.controller;
import com.lu.tlias84.utils.OssUtils;
import com.lu.tlias84.utils.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/upload")
@Slf4j
public class UploadController {
@PostMapping
public ResultUtil upload(MultipartFile file) {
String url = OssUtils.URL(file);
return ResultUtil.success(new StringBuilder(url));
}
}
4.用apifox测试上传
上传成功
5.查看文件列表是否有上传的图片
文件存在上传成功