栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

OSS公共类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OSS公共类

package com.hundsun.oss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Date;
import java.util.Iterator;
import java.util.Properties;
import java.util.UUID;

public class OssService {
    protected static Log log = LogFactory.getLog(OssService.class);


    public static  String endpoint ;

    public static String accessKeyId ;

    public static String accessKeySecret ;

    public static  String bucketName ;

    static{
        Properties properties = readProperties() ;
        endpoint = properties.getProperty("oss.endpoint");
        accessKeyId = properties.getProperty("oss.accessKeyId");
        accessKeySecret = properties.getProperty("oss.accessKeySecret");
        bucketName = properties.getProperty("oss.bucketName");
    }

   
    public static void downloadOSSfile(HttpServletResponse response, String objectName) throws IOException {

        log.info("==OssServiceImpl.downloadOSSfile== start");
        log.info("==endpoint=="+endpoint);
        log.info("==accessKeyId=="+accessKeyId);
        log.info("==accessKeySecret=="+accessKeySecret);
        log.info("==bucketName=="+bucketName);

        objectName = replaceStartSeq(objectName);
        log.info("==OssServiceImpl.doFilter== objectName:"+objectName);


        long startCreateOssTime = new Date().getTime();
        OSS ossClient = OssService.getOss();
        OSSObject ossObject = ossClient.getObject(bucketName, objectName);
        long endCreateOssTime = new Date().getTime();
        log.info("ossClient.getObject 获取对象成功,耗时:"+((endCreateOssTime/1000)-(startCreateOssTime/1000))+"秒") ;

        // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。
        // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
        InputStream is = ossObject.getObjectContent();

        String downloadFilename = StringUtils.substringAfterLast(objectName, "/");

        //文件名非正确获取时,随便生成一个
        if(!StringUtils.contains(downloadFilename, ".")){
            UUID uuid = UUID.randomUUID();
            String fileType = StringUtils.substringAfterLast(objectName, ".");
            downloadFilename = uuid+"."+fileType;
        }

        //让浏览器收到这份资源的时候, 以下载的方式提醒用户,而不是直接展示。
        response.setHeader("Content-Disposition", "inline; filename="+downloadFilename);
        //3. 转化成输入流
        OutputStream os = response.getOutputStream();

        int len = 0 ;
        byte[]buffer = new byte[1024];
        while( (len = is.read(buffer)) != -1){
            os.write(buffer, 0, len);
        }
        os.close();
        is.close();
        log.info("==OssServiceImpl.downloadOSSfile==  end");
        ossObject.close();
        // 关闭OSSClient。
        ossClient.shutdown();
    }


    public static void simpleDownLoad(String objectName,String localPath){
        log.info("==OssServiceImpl.simpleDownLoad== start===objectName="+objectName+"  localFilePathAndName==="+localPath);
        objectName = replaceStartSeq(objectName);
        // 创建OSSClient实例。
        File localFile = new File(localPath);
        File fileParent = localFile.getParentFile();
        if(!fileParent.exists()){
            fileParent.mkdirs();
        }
        //创建OSS对象
        OSS ossClient = OssService.getOss();

        //获取对象
        long startGetObjectTime = new Date().getTime();
        ossClient.getObject(new GetObjectRequest(bucketName, objectName), localFile);
        long endGetObjectTime = new Date().getTime();
        log.info("ossClient.getObject 获取对象成功,耗时:"+((endGetObjectTime/1000)-(startGetObjectTime/1000))+"秒") ;
        // 关闭OSSClient。
        ossClient.shutdown();
        log.info("==OssServiceImpl.simpleDownLoad== end===objectName="+objectName+"  localFilePathAndName==="+localFile);

    }

    public OSSObject getOssObject(String objectName){
        log.info("==OssServiceImpl.getOssObject== start===objectName="+objectName);
        objectName = replaceStartSeq(objectName);
        //创建OSS对象
        OSS ossClient = this.getOss();

        //获取对象
        long startGetObjectTime = new Date().getTime();
        OSSObject ossObject = ossClient.getObject(bucketName, objectName);
        long endGetObjectTime = new Date().getTime();
        log.info("ossClient.getObject 获取对象成功,耗时:"+((endGetObjectTime/1000)-(startGetObjectTime/1000))+"秒") ;

        // 关闭OSSClient。
        ossClient.shutdown();
        log.info("==OssServiceImpl.getOssObject== end===objectName="+objectName);
        return ossObject;
    }

   
    public static void uploadOSSform(MultipartFile uploadfile, String objectName) throws IOException{
        log.info("==OssServiceImpl.uploadOSSform== start");

        log.info("==endpoint=="+endpoint);
        log.info("==accessKeyId=="+accessKeyId);
        log.info("==accessKeySecret=="+accessKeySecret);
        log.info("==bucketName=="+bucketName);

        objectName = replaceStartSeq(objectName);
        log.info("==OssServiceImpl.uploadOSSform== objectName:"+objectName);

        // 创建OSSClient实例。

        //上传文件流
        InputStream inputStream = uploadfile.getInputStream();
        OSS ossClient = OssService.getOss();

        long startPostObjectTime = new Date().getTime();
        ossClient.putObject(bucketName, objectName , inputStream);
        long endPostObjectTime = new Date().getTime();
        log.info("ossClient.getObject 上传对象成功,耗时:"+((endPostObjectTime/1000)-(startPostObjectTime/1000))+"秒") ;

        //关闭OSSClient
        ossClient.shutdown();
        inputStream.close();
        log.info("==OssServiceImpl.uploadOSSform==  end");
    }

   
    public static void uploadOSSfile(File file,String objectName) throws IOException{
        objectName = replaceStartSeq(objectName);
        // 创建OSSClient实例。
        InputStream inputStream = new FileInputStream(file);
        OSS ossClient = OssService.getOss();

        //上传文件流
        long startPostObjectTime = new Date().getTime();
        ossClient.putObject(bucketName, objectName , inputStream);
        long endPostObjectTime = new Date().getTime();
        log.info("ossClient.getObject 上传对象成功,耗时:"+((endPostObjectTime/1000)-(startPostObjectTime/1000))+"秒") ;

        // 关闭OSSClient。
        ossClient.shutdown();
        inputStream.close();
        log.info("==OssServiceImpl.uploadOSSfile==  end");
    }


   
    private static Boolean uploadAndDelFile(String tempFilePath,String objectName){
        log.info("====uploadAndDelTempFile  开始 tempFilePath="+tempFilePath);
        try {
            File tempFile = new File(tempFilePath);
            OssService.uploadOSSfile(tempFile, objectName);
            if(tempFile.exists()){
                tempFile.delete();
            }
        }catch (FileNotFoundException e){
            log.error("读取不到文件:",e);
            return false;
        }catch (IOException e){
            log.error("IOException 异常:",e);
            return false;
        }catch (Exception e){
            log.error("发生错误:",e);
            return false;
        }
        log.info("====uploadAndDelTempFile  成功 tempFilePath="+tempFilePath);
        return true;
    }

   
    public static Boolean delTempFile(String tempFilePath){
        log.info("====delTempFile  开始 tempFilePath="+tempFilePath);
        try {
            File tempFile = new File(tempFilePath);
            if(tempFile.exists()){
                tempFile.delete();
            }
        }catch (Exception e){
            log.error("发生错误:",e);
            return false;
        }
        log.info("====delTempFile  成功 tempFilePath="+tempFilePath);
        return true;
    }

    public static Boolean uploadAndDelTempfileByAliyunFlag(String tempFilePath){
        log.info("====uploadAndDelTempfileByAliyunFlag  开始 tempFilePath="+tempFilePath);
        Boolean result =false;
        //if(EnumAliyunFlagStatus.on.getCode().equals(aliyunFlag)){
            String distOssFilePath = null;
            distOssFilePath = replaceStartSeq(tempFilePath);
            result =OssService.uploadAndDelFile(tempFilePath,distOssFilePath);
        //}
        log.info("====uploadAndDelTempfileByAliyunFlag  结束 结果为:"+result+"  tempFilePath="+tempFilePath);

        return result;
    }

    public static String  replaceStartSeq(String path){
        if(path.startsWith("/")){
            path = path.substring(1,path.length());
            path = replaceStartSeq(path);
        }
        return path;
    }

   
    public static void delOSSfile(String objectName) throws IOException{
        log.info("==OssService.deleteOSSfile== start objectName:"+objectName);
        objectName = replaceStartSeq(objectName);
        // 创建OSSClient实例。
        //删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
        OSS ossClient = OssService.getOss();
        ossClient.deleteObject(bucketName, objectName);

        // 关闭OSSClient。
        ossClient.shutdown();
        log.info("==OssService.deleteOSSfile==  end");
    }

    public static  OSS getOss(){
        long startCreateOssTime = new Date().getTime();
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        long endCreateOssTime = new Date().getTime();
        log.info("ossClient.getObject 获取OSSClient成功,耗时:"+((endCreateOssTime/1000)-(startCreateOssTime/1000))+"秒") ;
        return ossClient;
    }

    public static Properties readProperties(){
        Properties prop = new Properties();
        try{
            //读取属性文件a.properties
            InputStream in = OssService.class.getResourceAsStream("/server.properties");
            prop.load(in);     ///加载属性列表
            Iterator it=prop.stringPropertyNames().iterator();
            while(it.hasNext()){
                String key=it.next();
            }
            in.close();
        }catch(Exception e){
            log.error("==readProperties==",e);
        }
        return prop;
    }
}
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/936816.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号