java集成腾讯云COS

   @RequestMapping(value = "/test", method = RequestMethod.POST)
    @ResponseBody
    public String test(HttpServletRequest request, HttpServletResponse response) {
        Map<String,Object> map = new HashMap<>();
        String filePath = "";
        try {
            // 跨域设置
            response.setHeader("Access-Control-Allow-Origin", "*"); //生产环境绝对不允许设置为“*”
            response.setHeader("Access-Control-Allow-Methods", "*");
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            MultipartFile imgFile = multipartRequest.getFile("fileupload");
            // 过滤文件
            if(!FileUtils.accept(imgFile.getOriginalFilename())){
                logger.info("File: " + imgFile.getOriginalFilename() + " is illegal file.");
                return null;
            }
            //上传图片
            if (!imgFile.isEmpty()) {
                String filename = imgFile.getOriginalFilename();
                //FastDFSFile fdfsFile;
                //fdfsFile = new FastDFSFile(imgFile.getName(), imgFile.getBytes(), prefix);
                //filePath = FileManager.upload(fdfsFile);
                filePath = CosClientUtils.uploadFile(imgFile,request);
                
            }
        } catch (Exception e) {
            logger.error("webuploader error", e);
        }
        return filePath;
    }
package com.neixunbao.platform.qcloud;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.Download;
import com.qcloud.cos.transfer.TransferManager;
import com.qcloud.cos.transfer.TransferManagerConfiguration;
import com.qcloud.cos.transfer.Upload;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @Author: 
 * @Date: 2022年1月10日17:39:08
 * @Description: java实现腾讯云存储服务(COSClient)
 * @REGIONID 区域
 * @KEY  上传上云之后的名字
 * @KEY01 需要删除的文件
 */
public class CosClientUtils {
 
    private final static String SECRET_ID = "";
    private final static String SECRET_KEY = "";
    //存储桶名称
    private final static String BUCKETNAME = "";
    //区域
    private final static String REGIONID = "ap-beijing";
    //地址
    private final static String BASEURL = "";

    // 创建 TransferManager 实例,这个实例用来后续调用高级接口
    static TransferManager createTransferManager() {
        // 创建一个 COSClient 实例,这是访问 COS 服务的基础实例。
        // 详细代码参见本页: 简单操作 -> 创建 COSClient
        COSClient cosClient = createCOSClient();

        // 自定义线程池大小,建议在客户端与 COS 网络充足(例如使用腾讯云的 CVM,同地域上传 COS)的情况下,设置成16或32即可,可较充分的利用网络资源
        // 对于使用公网传输且网络带宽质量不高的情况,建议减小该值,避免因网速过慢,造成请求超时。
        ExecutorService threadPool = Executors.newFixedThreadPool(32);

        // 传入一个 threadpool, 若不传入线程池,默认 TransferManager 中会生成一个单线程的线程池。
        TransferManager transferManager = new TransferManager(cosClient, threadPool);

        // 设置高级接口的配置项
        // 分块上传阈值和分块大小分别为 5MB 和 1MB
        TransferManagerConfiguration transferManagerConfiguration = new TransferManagerConfiguration();
        transferManagerConfiguration.setMultipartUploadThreshold(5*1024*1024);
        transferManagerConfiguration.setMinimumUploadPartSize(1*1024*1024);
        transferManager.setConfiguration(transferManagerConfiguration);

        return transferManager;
    }
    static void shutdownTransferManager(TransferManager transferManager) {
        // 指定参数为 true, 则同时会关闭 transferManager 内部的 COSClient 实例。
        // 指定参数为 false, 则不会关闭 transferManager 内部的 COSClient 实例。
        transferManager.shutdownNow(true);
    }
    /**
     * 初始化CosClient相关配置, appid、accessKey、secretKey、region
     * @return
     */
    public static COSClient createCOSClient() {
        // 1 初始化用户身份信息(secretId, secretKey)。
        // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
        COSCredentials cred = new BasicCOSCredentials(SECRET_ID, SECRET_KEY);
        // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
        Region region = new Region(REGIONID);
        ClientConfig clientConfig = new ClientConfig(region);
        // 这里建议设置使用 https 协议
        // 从 5.6.54 版本开始,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 以下的设置,是可选的:
        // 设置 socket 读取超时,默认 30s
        clientConfig.setSocketTimeout(30*1000);
        // 设置建立连接超时,默认 30s
        clientConfig.setConnectionTimeout(30*1000);
        // 如果需要的话,设置 http 代理,ip 以及 port
        //clientConfig.setHttpProxyIp("httpProxyIp");
        //clientConfig.setHttpProxyPort(80);

        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);
        return cosClient;
    }
    /**
     * 上传文件
     *
     * @return
     */
    public static String uploadFile(MultipartFile imgFile, HttpServletRequest request) {
        //转为File
        String filename = imgFile.getOriginalFilename();
        String prefix = filename.substring(filename.lastIndexOf(".") + 1);//后缀
        String path=request.getSession().getServletContext().getRealPath("/filetool");//生成一个目录
        String uuid= UUID.randomUUID().toString().replace("-","");//customer_YYYYMMDDHHMM
        String fileName = uuid+"."+prefix; //文件全路径
        File file=new File(path,fileName);
        //如果path路径不存在,创建一个文件夹
        if(!file.exists()){
            file.mkdirs();
        }

        PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, fileName, file);
        TransferManager transferManager = createTransferManager();
        try {
            imgFile.transferTo(file);//没有这句话,生成的文件就是一个文件夹。有了以后,就会在path路径下,生成一个文件
            // 高级接口会返回一个异步结果Upload
            // 可同步地调用 waitForUploadResult 方法等待上传完成,成功返回UploadResult, 失败抛出异常
            Upload upload = transferManager.upload(putObjectRequest);
            UploadResult uploadResult = upload.waitForUploadResult();
            dfsdelete(file.toString());
            return BASEURL+uploadResult.getKey();
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            shutdownTransferManager(transferManager);
        }
        return "";
    }

    /**
     * 下载文件
     *
     * @param
     * @param
     * @return
     */
    public static String downLoadFile(String fullFileName) {
        File downFile = new File(fullFileName);
        // 使用高级接口必须先保证本进程存在一个 TransferManager 实例,如果没有则创建
// 详细代码参见本页:高级接口 -> 创建 TransferManager
        TransferManager transferManager = createTransferManager();
        String key = "exampleobject";
        // 本地文件路径
        String localFilePath = "/path/to/localFile";
        File downloadFile = new File(localFilePath);

        GetObjectRequest getObjectRequest = new GetObjectRequest(BUCKETNAME, fullFileName);
        try {
            // 返回一个异步结果 Donload, 可同步的调用 waitForCompletion 等待下载结束, 成功返回 void, 失败抛出异常
            Download download = transferManager.download(getObjectRequest, downloadFile);
            download.waitForCompletion();
            return download.getBucketName();
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            shutdownTransferManager(transferManager);
        }
        return "";
    }

    /**
     * 删除文件
     *
     * @param path
     */
    public static void deleteFile(String path) {
        // 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
        // 详细代码参见本页:简单操作 -> 创建 COSClient
        COSClient cosClient = createCOSClient();
        try {
            // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
            // 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](https://cloud.tencent.com/document/product/436/13324)
            String key = "exampleobject";
            cosClient.deleteObject(BUCKETNAME, key);
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        }finally {
            cosClient.shutdown();
        }

    }

    /**
     * 创建桶
     *
     * @param bucketName
     * @return
     * @throws CosClientException
     * @throws CosServiceException
     */
    public static Bucket createBucket(String bucketName) throws CosClientException, CosServiceException {
        COSClient cc = createCOSClient();
        Bucket bucket = null;
        try {
            bucket = cc.createBucket(bucketName);
        } catch (CosClientException e) {
            e.printStackTrace();
        } finally {
        }
        return bucket;
    }

    ;

    /**
     * 删除桶
     *
     * @param bucketName
     * @throws CosClientException
     * @throws CosServiceException
     */
    public static void deleteBucket(String bucketName) throws CosClientException, CosServiceException {
        COSClient cc = createCOSClient();
        try {
            cc.deleteBucket(bucketName);
        } catch (CosClientException e) {
            e.printStackTrace();
        } finally {
        }
    }

    ;

    /**
     * 判断桶是否存在
     *
     * @param bucketName
     * @return
     * @throws CosClientException
     * @throws CosServiceException
     */
    public boolean doesBucketExist(String bucketName) throws CosClientException, CosServiceException {
        COSClient cc = createCOSClient();
        boolean bucketExistFlag = cc.doesBucketExist(bucketName);
        return bucketExistFlag;
    }

    ;

    /**
     * 查看桶文件
     *
     * @param bucketName
     * @return
     * @throws CosClientException
     * @throws CosServiceException
     */
    public static ObjectListing listObjects(String bucketName) throws CosClientException, CosServiceException {
        COSClient cc = createCOSClient();

        // 获取 bucket 下成员(设置 delimiter)
        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
        listObjectsRequest.setBucketName(bucketName);
        // 设置 list 的 prefix, 表示 list 出来的文件 key 都是以这个 prefix 开始
        listObjectsRequest.setPrefix("");
        // 设置 delimiter 为/, 即获取的是直接成员,不包含目录下的递归子成员
        listObjectsRequest.setDelimiter("/");
        // 设置 marker, (marker 由上一次 list 获取到, 或者第一次 list marker 为空)
        listObjectsRequest.setMarker("");
        // 设置最多 list 100 个成员,(如果不设置, 默认为 1000 个,最大允许一次 list 1000 个 key)
        listObjectsRequest.setMaxKeys(100);

        ObjectListing objectListing = cc.listObjects(listObjectsRequest);
        // 获取下次 list 的 marker
        String nextMarker = objectListing.getNextMarker();
        // 判断是否已经 list 完, 如果 list 结束, 则 isTruncated 为 false, 否则为 true
        boolean isTruncated = objectListing.isTruncated();
        List<COSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
        for (COSObjectSummary cosObjectSummary : objectSummaries) {
            // get file path
            String key = cosObjectSummary.getKey();
            // get file length
            long fileSize = cosObjectSummary.getSize();
            // get file etag
            String eTag = cosObjectSummary.getETag();
            // get last modify time
            Date lastModified = cosObjectSummary.getLastModified();
            // get file save type
            String StorageClassStr = cosObjectSummary.getStorageClass();
        }
        return objectListing;
    }

    /**
     * 生成文件路径
     *
     * @return
     */
    private String getFileKey(String originalfileName) {
        String filePath = "test/";
        //1.获取后缀名 2.去除文件后缀 替换所有特殊字符

        return filePath;
    }

    public static void dfsdelete(String path) {
        File file=new File(path);
        if(file.isFile()) {//如果此file对象是文件的话,直接删除
            file.delete();
            return;
        }
        //当 file是文件夹的话,先得到文件夹下对应文件的string数组 ,递归调用本身,实现深度优先删除
        String [] list=file.list();
        for (int i = 0; i < list.length; i++) {
            dfsdelete(path+File.separator+list[i]);

        }//当把文件夹内所有文件删完后,此文件夹已然是一个空文件夹,可以使用delete()直接删除
        file.delete();
        return;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值