2.编写OSS必要字段信息(application.yml)com.aliyun.oss aliyun-sdk-oss3.10.2 joda-time joda-time2.10.1
server:
port: 8081
spring:
profiles:
active: dev
application:
name: oss-service
aliyun:
oss:
endpoint: xxx
keyid: xxx
keysercret: xxx
bucketname: xxx
登录aliyun查看oss相关配置
endpoint:地域节点
buckectName:
keyid和密钥
3.使用类封装OSS需要的配置信息
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss") //读取yml的配置
public class OssProperties {
private String endpoint;
private String keyid;
private String keysercret;
private String bucketname;
}
4.编写服务层
//需要io流,文件目录,文件名字
public interface FileService {
String upload(InputStream inputStream,String module,String originalFileName);
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.pzh.guli.service.oss.service.FileService;
import com.pzh.guli.service.oss.utils.OssProperties;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.UUID;
@Service
public class FileServiceImp implements FileService {
@Autowired
private OssProperties ossProperties;
//oss文件上传
public String upload(InputStream inputStream, String module, String originalFileName) {
String endpiont = ossProperties.getEndpoint();
String keyid = ossProperties.getKeyid();
String keydercret = ossProperties.getKeysercret();
String bucketname = ossProperties.getBucketname();
System.out.println(endpiont+keyid+keydercret+keydercret);
OSS oss=new OSSClientBuilder().build(endpiont,keyid,keydercret);
System.out.println(oss.doesBucketExist(bucketname));
//判断是否存在
if (!oss.doesBucketExist(bucketname)){ //不存在就创建
oss.createBucket(bucketname);
oss.setBucketAcl(bucketname, CannedAccessControlList.PublicRead); //设置权限 公开可读
}
//构建路径
String directory = new DateTime().toString("yyyy/MM/dd");//时间构建目录
String fileName= UUID.randomUUID().toString();//文件名
String fileExtension=originalFileName.substring(originalFileName.lastIndexOf("."));//文件扩展名
String key=module+"/"+directory+"/"+fileName+fileExtension;//完整地址
//上传
oss.putObject(bucketname,key,inputStream);
oss.shutdown();
//https://guli-file-2023.oss-cn-hangzhou.aliyuncs.com/avatar/2022/05/21/xx.png
return "https://"+bucketname+"."+endpiont+"/"+key;
}
}
5.编写控制层服务
@PostMapping("upload")
public Result upload(@ApiParam("文件名") @RequestParam MultipartFile file,@ApiParam("文件目录模块") @RequestParam String module) throws IOException {
InputStream inputStream = file.getInputStream();
String filename = file.getOriginalFilename();
String url = fileService.upload(inputStream, module, filename);
return Result.ok().data("url",url).message("文件上传成功");
}
6.测试



