1.前往阿里云开通oss
2.创建bucket
3. 获取AccessKeyId、AccessKeySecret
4.获取EndPoint
5.创建fileDir
6.添加maven依赖
<!-- 阿里云OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
6.测试代码
工具类
package com.wang.learn.cloudredis.utils;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.*;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.wang.learn.cloudredis.constant.AliyunOSSConstants;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
* ClassName AliyunOSSUtil
* Description
*
* @author wang
* Date 2021/9/2 19:13
*/
public class AliyunOSSUtil {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class);
/**
* 上传文件
*/
public static String upLoad(MultipartFile file) {
logger.info("------OSS文件上传开始--------" + file.getName());
String endPoint = AliyunOSSConstants.END_POINT;
String accessKeyId = AliyunOSSConstants.ASSCESS_KEY_ID;
String accessKeySecret = AliyunOSSConstants.ASSCESS_KEY_SECRET;
String bucketName = AliyunOSSConstants.BUCKET_NAME;
String fileDir = AliyunOSSConstants.FILE_DIR;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
String fileUrl = null;
OSS client = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
try {
// 判断容器是否存在,不存在就创建
if (!client.doesBucketExist(bucketName)) {
client.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
client.createBucket(createBucketRequest);
}
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.indexOf("."));
// 设置文件路径和名称
fileUrl = fileDir + "/" + (dateStr + "/" + UUID.randomUUID().toString().replace("-", "") + suffix);
logger.info("fileUrl:" + fileUrl);
// 上传文件
PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file.getInputStream()));
// 设置权限(公开读)
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
if (result != null) {
logger.info("resp:" + JSONObject.toJSONString(result));
logger.info("------OSS文件上传成功------" + AliyunOSSConstants.COMMON_URL + fileUrl);
}
} catch (OSSException oe) {
logger.error(oe.getMessage());
} catch (ClientException ce) {
logger.error(ce.getErrorMessage());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (client != null) {
client.shutdown();
}
}
return AliyunOSSConstants.COMMON_URL + fileUrl;
}
/**
* 删除文件
*/
public static String delete(String fileUrl) {
logger.info("------OSS文件删除开始--------" + fileUrl);
String endPoint = AliyunOSSConstants.END_POINT;
String accessKeyId = AliyunOSSConstants.ASSCESS_KEY_ID;
String accessKeySecret = AliyunOSSConstants.ASSCESS_KEY_SECRET;
String bucketName = AliyunOSSConstants.BUCKET_NAME;
OSS client = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
try {
client.deleteObject(bucketName, fileUrl);
logger.info("------OSS文件删除成功------" + AliyunOSSConstants.COMMON_URL + fileUrl);
} catch (OSSException oe) {
logger.error(oe.getMessage());
} catch (ClientException ce) {
logger.error(ce.getErrorMessage());
} finally {
if (client != null) {
client.shutdown();
}
}
return AliyunOSSConstants.COMMON_URL + fileUrl;
}
}
控制层
package com.wang.learn.cloudredis.controller;
import com.wang.learn.cloudredis.utils.AliyunOSSUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* ClassName RedisController
* Description
*
* @author wang
* Date 2021/6/19 10:48
*/
@RestController
@RequestMapping("/file")
public class UploadController {
/**
* 文件上传
*/
@PostMapping(value = "/upload")
public Object upload(@RequestParam("files") List<MultipartFile> files) {
List<Object> list = new ArrayList<>();
try {
for (MultipartFile file : files) {
String uploadUrl = AliyunOSSUtil.upLoad(file);
list.add(uploadUrl);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}
/**
* 文件删除
*/
@PostMapping(value = "/delete")
public Object delete(@RequestParam("fileUrl") String fileUrl) {
try {
AliyunOSSUtil.delete(fileUrl);
} catch (Exception ex) {
ex.printStackTrace();
return "fail";
}
return "success";
}
}
常量类
package com.wang.learn.cloudredis.constant;
/**
* ClassName AliyunOSSConstants
* Description
*
* @author wang
* Date 2021/9/2 19:15
*/
public class AliyunOSSConstants {
/**
* AccessKey ID
* LTAI5t5eTxvcpkoEjndbLto9
* AccessKey Secret
* ul1EPPCaAEDuYTbwZNrYeZiLSDe3Bl
*/
// OSS唯一key
public static final String ASSCESS_KEY_ID = "";
// OSS唯一key秘钥
public static final String ASSCESS_KEY_SECRET = "";
// 地域节点
public static final String END_POINT = "";
// Bucket名称
public static final String BUCKET_NAME = "";
// 文件一级路径
public static final String FILE_DIR = "test";
// 文件访问域名
public static final String COMMON_URL = "";
}