添加pom
<!-- OSS各个项目单独加依赖,根据需要进行添加-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency> 配置文件添加
#阿里云OSS配置
aliyun:
oss:
endpoint: oss-cn-shenzhen.aliyuncs.com
access-key-id: LTAI4GJR7bL8JEzBv7zx69J4
access-key-secret: CNfxHJeTTLlFQA2a2X5BprjqjK047l
bucketname: xdclass-1024shop-img 
中间那两个,就是生成的时候出现的,说了只出现一次的,我这里就不放出来了!
这里弄一个配置类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "aliyun.oss")
@Configuration
@Data
public class OSSConfig {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketname;
}
现在完成了基本的配置,接下来我们创建一个service,一个impl类,并且在usercontroller里面尝试直接上传的操作,代码依次放出
import org.springframework.web.multipart.MultipartFile;
public interface FileService {
String uploadUserImg(MultipartFile file);
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.slf4j.Slf4j;
import net.xdclass.config.OSSConfig;
import net.xdclass.service.FileService;
import net.xdclass.utils.CommonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.sql.rowset.serial.SerialStruct;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Service
@Slf4j
public class FileServiceImpl implements FileService {
@Autowired
private OSSConfig ossConfig;
@Override
public String uploadUserImg(MultipartFile file) {
//获取相关配置
String bucketname = ossConfig.getBucketname();
String endpoint = ossConfig.getEndpoint();
String accessKeyId = ossConfig.getAccessKeyId();
String accessKeySecret = ossConfig.getAccessKeySecret();
//创建OSS对象
OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
//获取原生文件名
String originalFileName = file.getOriginalFilename();
//JDK8的日期格式 _获取当前时间
LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
//拼装路径,oss上的存储的路径 2022/13/1/qweqwe.jpg
String folder = dtf.format(ldt);
String fileName = CommonUtil.generateUUID();
String extension = originalFileName.substring(originalFileName.lastIndexOf("."));
String newFileName = "user/"+folder+"/"+fileName+extension;
try {
PutObjectResult putObjectResult = ossClient.putObject(bucketname,newFileName,file.getInputStream());
//拼装返回路径
if (putObjectResult!=null){
String imgUrl = "https://"+bucketname+"."+endpoint+"/"+newFileName;
return imgUrl;
}
} catch (IOException e) {
log.error("文件上传失败:"+e);
}finally {
//oss关闭服务,不然回造成OOM(内存泄露)
ossClient.shutdown();
}
return null;
}
} @Autowired
private FileService fileService;
/**
* 上传用户头像
* @param file
* @return
*/
@ApiOperation("用户头像上传")
@PostMapping(value = "upload")
public JsonData uploadUserImg(
@ApiParam(value = "文件上传",required = true)
@RequestPart("file")MultipartFile file){
String result = fileService.uploadUserImg(file);
return result!=null?JsonData.buildSuccess(result):JsonData.buildResult(BizCodeEnum.FILE_UPLOAD_USER_IMG_FAIL);
}
} 三步走之后我们就已经实现了,让我们来测试一下吧




来到阿里OSS对象存储,我们可以看到,已经上传成功啦




spring:
servlet:
multipart:
max-file-size: 30MB
max-request-size: 30MB OK,大功告成!这一波又学习了文件上传,又学习了OSS的存储!
本文作者为DBC,转载请注明。