package com.example.web_wechat.controller;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.internal.OSSHeaders;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.StorageClass;
import javafx.util.Pair;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.InputStream;
import java.util.UUID;
/**
* @author dugt1998@163.com
* @date 2020/11/21 9:13
*/
@Component
public class OSSUtil {
@Value("${aliyun.oss.endpoint}")
private String endpoint;
@Value("${aliyun.user.accessKeyId}")
private String keyid;
@Value("${aliyun.user.accessKeySecret}")
private String keySecret;
@Value("${aliyun.oss.bucketName}")
private String bucketName;
/**
* 上传图片 (连接点击可以预览)
* dugt1998@163.com
*/
public Pair<String, String> uploadImg(MultipartFile file,String dir) throws Exception {
InputStream in = file.getInputStream();
String fileName = file.getOriginalFilename();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(in.available());
metadata.setCacheControl("no-cache");
metadata.setHeader("Access-Control-Allow-Origin", "*");
metadata.setHeader("Access-Control-Allow-Methods", "POST GET HEAD PUT DELETE");
metadata.setHeader("Access-Control-Max-Age", "3600");
metadata.setHeader("Pragma", "no-cache");
metadata.setContentEncoding("utf-8");
metadata.setContentType(getContentType(fileName));
OSS oss = new OSSClientBuilder().build(endpoint, keyid, keySecret);
String uuid = UUID.randomUUID().toString();
oss.putObject(bucketName, dir +"/"+ uuid + fileName, in, metadata);
oss.shutdown();
in.close();
String url =
"https://" + bucketName + "." + endpoint + "/" + dir+"/" + uuid + fileName;
return new Pair<>(url, uuid + fileName);
}
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";
}
/**
**上传文件,点击返回的地址是下载
*/
public Pair<String, String> ossFileUpload(File file,String dir) {
String ossFileName = UUID.randomUUID() + "_" + file.getName();
OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keySecret);
try {
PutObjectRequest putObjectRequest =
new PutObjectRequest(bucketName, ossFileName, file);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS,
StorageClass.Standard.toString());
metadata.setObjectAcl(CannedAccessControlList.PublicReadWrite);
metadata.setContentType("application/octet-stream");
putObjectRequest.setMetadata(metadata);
ossClient.putObject(putObjectRequest);
String url = "https://" + bucketName + "." + endpoint + "/" + ossFileName;
return new Pair<>(url, ossFileName);
} catch (Exception e) {
throw new RuntimeException();
} finally {
ossClient.shutdown();
file.delete();
}
}
}
依赖包:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
application.yml
.
aliyun:
user:
accessKeyId: xxxxxxxxxxxx
accessKeySecret: xxxxxxxxxxxx
oss:
endpoint: oss-cn-hangzhou.aliyuncs.com
bucketName: xxxxxxxxxxxx