<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
@PostMapping(value = {"/common/uploadFile/{pathType}"}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ApiOperation("上传所有图片和视频文件相关接口")
public AjaxResult testUploadFile(@RequestPart("file") MultipartFile file,@PathVariable("pathType") String pathType,HttpServletResponse response) throws IOException {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "LTAI5tF3zJVeTP6qQUg7jf2Q";
String accessKeySecret = "q1PLl7in9w0ZCgaESXIhqfoE3t06Y5";
String bucketName="tempbucket123";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//判断存储空间是否存在,如果不存在就创建
boolean doesBucketExist = ossClient.doesBucketExist(bucketName);
if(!doesBucketExist){
// 创建CreateBucketRequest对象。
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
// 创建存储空间。
ossClient.createBucket(createBucketRequest);
// 设置权限(公开读)
ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
}
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 最后上传生成的文件名
String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
// oss中的文件夹名
String objectName =pathType+"/"+ sdf.format(new Date()) + "/" + finalFileName;
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(file.getBytes()));
ObjectMetadata metadata=new ObjectMetadata();
//设置为公共读
metadata.setObjectAcl(CannedAccessControlList.PublicRead);
metadata.setContentType(getcontentType(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))));
putObjectRequest.setMetadata(metadata);
// 设置该属性可以返回response。如果不设置,则返回的response为空。
putObjectRequest.setProcess("true");
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
System.out.println("result = " + result);
System.out.println("result = " + result.getResponse().getUri());
//下载文件
// OSSObject ossClientObject = ossClient.getObject(bucketName, objectName);
// BufferedInputStream inputStream=new BufferedInputStream(ossClientObject.getObjectContent());
// BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
// //通知浏览器以附件形式下载
// response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(objectName, "utf-8"));
// //BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(new File("f:\\a.txt")));
// byte[] car = new byte[1024];
// int L = 0;
// while ((L = inputStream.read(car)) != -1) {
// out.write(car, 0, L);
// }
// if (out != null) {
// out.flush();
// out.close();
// }
// if (inputStream != null) {
// inputStream.close();
// }
}catch (OSSException oe){
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
}finally {
// 关闭OSSClient。
ossClient.shutdown();
}
return AjaxResult.success();
}
//通过该方法快速获取文件类型
public static String getcontentType(String FilenameExtension) {
if (FilenameExtension.equalsIgnoreCase(".bmp")) {
return "image/bmp";
}
if (FilenameExtension.equalsIgnoreCase(".gif")) {
return "image/gif";
}
if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
FilenameExtension.equalsIgnoreCase(".jpg") ||
FilenameExtension.equalsIgnoreCase(".png")) {
return "image/jpg";
}
if (FilenameExtension.equalsIgnoreCase(".html")) {
return "text/html";
}
if (FilenameExtension.equalsIgnoreCase(".txt")) {
return "text/plain";
}
if (FilenameExtension.equalsIgnoreCase(".vsd")) {
return "application/vnd.visio";
}
if (FilenameExtension.equalsIgnoreCase(".pptx") ||
FilenameExtension.equalsIgnoreCase(".ppt")) {
return "application/vnd.ms-powerpoint";
}
if (FilenameExtension.equalsIgnoreCase(".docx") ||
FilenameExtension.equalsIgnoreCase(".doc")) {
return "application/msword";
}
if (FilenameExtension.equalsIgnoreCase(".xml")) {
return "text/xml";
}
return "image/jpg";
}