(OSS工具类)使用阿里云OSS对象存储来完成存储文件并返回URL 也可以使用文件名去查询对应的static资源
更加详细的可以参考阿里云OSS对象存储官方文档 阿里云OSS对象存储官方文档
1.导入Maven坐标 为阿里云OSS 可以参考官方文档
<!--阿里云SDK-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
package com.search.config;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
//阿里云OSS对象存储工具类
@Slf4j
@Component
public class OSSClientUtil {
//阿里云OSS API的内或外网域名
//@Value(value = "${oss.end-point}")
//这里推荐使用自定义域名来作为前缀 也可以使用公网或者内网来使用
private String endPoint="http://static.*********.com";
//阿里云OSS API的密钥Access Key ID
//@Value(value = "${oss.access-key-id}")
private String accessKeyId="***********";
//阿里云OSS API的密钥Access Key Secret
//@Value(value = "${oss.sccess-key-secret}")
private String sccessKeySecret="*********************";
//阿里云OSS API的bucket名称
//@Value(value = "${oss.bucket-name}")
private String bucketName="xinchacha";
//阿里云OSS 上传文件夹
//@Value("aliyun.oss.imageFolder")
private String imageFolder;
private CredentialsProvider credentialsProvider;
private final long IMAGE_EXPIRE_TIME = 60 * 60 * 1000L;//图片访问链接的过期时间
private OSSClient ossClient;
public OSSClientUtil() {
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
//这里是使用自定义域名来进行访问 详细的可以参考阿里云OSS官方文档
conf.setSupportCname(true);
ossClient = new OSSClient(endPoint, accessKeyId, sccessKeySecret,conf);
}
public void setConfigInfo() {
credentialsProvider = new DefaultCredentialProvider(accessKeyId, sccessKeySecret);
}
/**
* 初始化
*/
public void init() {
ossClient = new OSSClient(endPoint, accessKeyId, sccessKeySecret);
}
/**
* 销毁
*/
public void destory() {
ossClient.shutdown();
}
/**
* @param: instream
* @param: fileName
* @Return: java.lang.String
* @Decription: 上传图片至OSS
* @CreateDate: Created in 2018/12/11 16:36
* @Modify:
*/
public String uploadImageToOSS(MultipartFile file,String code) {
if (code.equals("1")){
imageFolder="bossImage/"; //老板相关
}else if (code.equals("2")){
imageFolder="companyLogo/"; //公司相关
}else if (code.equals("3")){
imageFolder="userImage/"; // 用户相关
}else if (code.equals("4")){
imageFolder="deadbeatImage/"; //老赖相关
}else if (code.equals("5")){
imageFolder="knowledgeImage/"; // 知识产权相关
}
if (ossClient == null) {
init();
}
String imageUrl = "";
try {
//创建上传Object的Metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.getInputStream().available());
// System.out.println(file.getInputStream());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
objectMetadata.setContentType(getcontentType(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))));
objectMetadata.setContentDisposition("inline;filename=" + file.getOriginalFilename());
//上传文件
if (ossClient.doesBucketExist(bucketName)) {
System.out.println("您已经创建Bucket:" + bucketName + "。");
} else {
System.out.println("您的Bucket不存在,创建Bucket:" + bucketName + "。");
// 创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
// 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
ossClient.createBucket(bucketName);
}
System.out.println(file.getOriginalFilename());
PutObjectResult putResult = ossClient.putObject(bucketName, imageFolder + file.getOriginalFilename(), file.getInputStream(), objectMetadata);
imageUrl = this.getImageUrl(file.getOriginalFilename(),code);
System.out.println(imageUrl);
} catch (IOException e) {
log.error("upload file to oss error name={}", file.getOriginalFilename(), e);
} finally {
try {
if (file.getInputStream() != null) {
file.getInputStream().close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return imageUrl;
}
/**
* @param: FilenameExtension
* @Return: java.lang.String
* @Decription: 判断OSS服务文件上传时文件的contentType
* @CreateDate: Created in 2018/12/11 17:19
* @Modify:
*/
private 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";
}
/**
* @param: fileName
* @Return: java.lang.String
* @Decription: 根据图片名称获取图片访问地址
* @CreateDate: Created in 2018/12/11 17:18
* @Modify:
*/
public String getImageUrl(String fileName,String code) {
if (code.equals("1")){
imageFolder="bossImage/"; //
}else if (code.equals("2")){
imageFolder="companyLogo/"; //
}else if (code.equals("3")){
imageFolder="userImage/"; //
}else if (code.equals("4")){
imageFolder="deadbeatImage/";
}else if (code.equals("5")){
imageFolder="knowledgeImage/"; //
}
URL url;
// 设置URL过期时间
Date expiration = new Date(new Date().getTime() + IMAGE_EXPIRE_TIME);
// 生成URL
url = ossClient.generatePresignedUrl(bucketName, imageFolder + fileName, expiration);
//判断URL是否存在 如果不存在则设置为默认
boolean flag = ossClient.doesObjectExist(bucketName, imageFolder + fileName);
// System.out.println(found);
if (flag) {
return url.toString();
} else {
// url = ossClient.generatePresignedUrl(bucketName, imageFolder + "xinchacha.jpg", expiration);
return null;
}
}
public void copy(String fileName,String newFileName){
CopyObjectResult result = ossClient.copyObject("xinchacha", "testImg/"+fileName, "xinchacha", "companyLogo/"+newFileName);
System.out.println("ETag: " + result.getETag() + " LastModified: " + result.getLastModified());
// 关闭OSSClient。
// ossClient.shutdown();
}
public List<String> uploadPdf(String KeyPrefix){
ObjectListing objectListing = ossClient.listObjects(bucketName, KeyPrefix);
List list=new ArrayList();
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
String x=s.getKey().substring(s.getBucketName().length()+1,s.getKey().length());
System.out.println(x);
System.out.println("\t" + s.getKey());
list.add(x);
}
return list;
}
}
本文作者:张三Blog
本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503301.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步