(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.csdn.net/qq_43565087/article/details/107630166