可以直接导入oss存储 但是无法限制文件大小
先导入oss依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
设置oss基本参数
@Component
public class OssConstant {
private static String endpoint = "";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。
// 强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
private static String accessKeyId = "";
private static String accessKeySecret = "";
private static String bucketName = "";
}
工具类
public class OssUtils {
private static String endpoint = "";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。
// 强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
private static String accessKeyId = "";
private static String accessKeySecret = "";
private static String bucketName = "cmzk";
/**
* 功能描述:
*
* @param:[objectKey, multipartFile 文件的新名称]
* @return:java.lang.String
* @date:2018/10/14 15:46
**/
public static String uploadFile(MultipartFile multipartFile)
throws OSSException, ClientException, FileNotFoundException {
// 创建OSSClient的实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 判断容器是否存在,不存在就创建
if (!ossClient.doesBucketExist(bucketName)) {
ossClient.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.createBucket(createBucketRequest);
}
// 设置文件名称
String uuid = UUID.randomUUID().toString().replace("-", "");
// 上传的文件不是空,并且文件的名字不是空字符串
if (multipartFile.getSize() != 0 && !"".equals(multipartFile.getName())) {
ObjectMetadata om = new ObjectMetadata();
om.setContentLength(multipartFile.getSize());
// 设置文件上传到服务器的名称
om.addUserMetadata("filename", uuid);
try {
ossClient.putObject(bucketName, uuid, new ByteArrayInputStream(multipartFile.getBytes()), om);
} catch (IOException e) {
}
}
// 设置这个文件地址的有效时间
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
URL url = ossClient.generatePresignedUrl(bucketName, uuid, expiration);
ossClient.shutdown();
// 第一种
// return "https://" + url.getAuthority() + url.getPath();
// 第二种返回
return url.toString();
}
}
@RestController
@RequestMapping("upload")
public class FileUplodRest {
// 单文件上传
@PostMapping("aloneFile")
public String fileUpload(@RequestParam("file") MultipartFile multipartFile) {
try {
return OssUtils.uploadFile(multipartFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
// 多文件上传
@GetMapping("file")
public ResultVO upload(@RequestParam MultipartHttpServletRequest request){
Iterator<String> fileNames = request.getFileNames();
List<String> urls = new ArrayList<>();
try {
while (fileNames.hasNext()) {
//把fileNames集合中的值打出来
String fileName = fileNames.next();
/*
* request.getFiles(fileName)方法即通过fileName这个Key, 得到对应的文件
* 集合列表. 只是在这个Map中, 文件被包装成MultipartFile类型
*/
List<MultipartFile> fileList = request.getFiles(fileName);
if (fileList.size() > 0) {
//遍历文件列表
Iterator<MultipartFile> fileIte = fileList.iterator();
while (fileIte.hasNext()) {
//获得每一个文件
MultipartFile multipartFile = fileIte.next();
String url = OssUtils.uploadFile(multipartFile);
urls.add(url);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return ResultVO.isOk(urls);
}
}