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");
    }

    /**
     * 下载文件
     * 比如
     *   url                               http://xxx.com:8600/upfile/apply_submit_file/yk0.jpg
     *   filename                     apply_submit_file/yk0.jpg
     *   objectName               upfile/apply_submit_file/yk0.jpg
     */
    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;
    }

    /**
     * 上传表单提交
     * 全文件名 http://web.jtpj.test:8600/upfile/apply_submit_file/yk0.jpg
     * objectName                                         upfile/apply_submit_file/yk0.jpg
     */
    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");
    }

    /**
     * 本地文件上传
     * 访问路径 http://web.jtpj.test:8600/upfile/apply_submit_file/yk0.jpg
     * 文件路径           d:/upfile/apply_submit_file/yk0.jpg
     * objectName         upfile/apply_submit_file/yk0.jpg
     */
    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");
    }


    /**
     * 本地文件按路径上传
     * 访问路径 http://web.jtpj.test:8600/upfile/apply_submit_file/yk0.jpg
     * 文件路径           /upfile/apply_submit_file/yk0.jpg
     * objectName         upfile/apply_submit_file/yk0.jpg
     */
    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;
    }

    /**
     * 本地文件按路径删除本地附件
     * 文件路径           /upfile/apply_submit_file/yk0.jpg
     */
    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;
    }

    /**
     *删除oss附件
     * objectName         upfile/apply_submit_file/yk0.jpg
     *
     * descibe:删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
     ossClient.deleteObject(bucketName, objectName);
     */
    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<String> it=prop.stringPropertyNames().iterator();
            while(it.hasNext()){
                String key=it.next();
            }
            in.close();
        }catch(Exception e){
            log.error("==readProperties==",e);
        }
        return prop;
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值