文章目录
一、创建OSS
打开阿里云 开通OSS服务,充值几块钱。
1.创建Backet
Backet设置跨域:
然后加入Backet打开跨域设置
就好了
2.查看Backet验证信息
(1).Endpoint(地域节点):
(2).accessKeyId和accessKeySecret:
他们像是账号密码
获取方式:
-
前往RAM控制台
-
添加用户
-
点击添加权限:
-
进入用户管理:
-
创建AccessKey:
参加成功后就可以看到accessKeyId和accessKeySecret了
3.bucket就是创建的名字
二、Java中使用OSS
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
@Value("${oss.endpoint}")
private String endpoint;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
@Value("${oss.accessKeyId}")
private String accessKeyId;
@Value("${oss.accessKeySecret}")
private String accessKeySecret;
// 填写Bucket名称,容器分组
@Value("${oss.bucketName}")
private String bucketName;
public ApiResult<List<Map>> ossUpdate(MultipartFile[] multipartFiles, String dir) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 默认文件夹
if (StrUtil.isBlank(dir)){
dir = "home";
}
try {
List<Map> list =new ArrayList<>();
for(MultipartFile multipartFile : multipartFiles){
// 文件流
InputStream inputStream = multipartFile.getInputStream();
// 设置该属性可以返回response。如果不设置,则返回的response为空。
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
String datePath = dateFormat.format(new Date());// 日期目录:2021/10/27
// 获取文件全名
String fileName = multipartFile.getOriginalFilename();
// 获取文件后缀名
String Postfix = fileName.substring(fileName.lastIndexOf("."));
// 构建目录结构
String uuid= UUID.randomUUID().toString(); // uuid替代文件名
// 文件在oss中的储存路径
String filePath = dir+"/"+datePath+"/"+uuid+Postfix;
/** 上传文件
* bucketName 储存区块
* filePath oss中储存地址
* inputStream 被储存文件的文件流
*/
ossClient.putObject(bucketName,filePath, inputStream);
// 上传后的请求地址
String url ="https://"+bucketName+"."+endpoint+"/"+filePath;
Map<String,Object> map=new HashMap<>();
map.put("url",url); // 请求地址
map.put("filePath",filePath); // oss文件存储地址
map.put("date",datePath); // 存储时间
map.put("fileName",fileName); // 上传文件原名
map.put("postfix",Postfix); // 文件后缀
list.add(map);
}
return ApiResult.ok(list);
} catch (OSSException oe) {
System.out.println("失败1");
} catch (ClientException ce) {
System.out.println("失败2");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return null;
}