实现照片上传到腾讯云存储桶

1,136 阅读3分钟

准备工作

腾讯云开通云存储服务

image.png

创建存储桶

image.png

在秘钥管理中获取秘钥

image.png

项目配置

pom.xml导入依赖(注意可能由于版本原因在运行过程报错)

	<dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.6.8</version>
        </dependency>


创建文件操作类

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.model.*;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.Transfer;
import com.qcloud.cos.transfer.TransferManager;
import com.qcloud.cos.transfer.TransferProgress;
import com.qcloud.cos.transfer.Upload;

import java.io.File;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 腾讯云对象存储
 * 
 */
public class TencentCOS {

	// 此处填写的存储桶名称
	private static final String bucketName = "xxxx";//创建存储桶时的名称
	// secretId
	private static final String secretId = "xxxx";
	// secretKey
	private static final String secretKey = "xxxx";//在上面秘钥管理中获取到

	// 1 初始化用户身份信息(secretId, secretKey,可在腾讯云后台中的API密钥管理中查看!
	private static COSCredentials cred = new BasicCOSCredentials(secretId,secretKey);

	// 2 设置bucket的区域, COS地域的简称请参照
	// https://cloud.tencent.com/document/product/436/6224,根据自己创建的存储桶选择地区
	private static ClientConfig clientConfig = new ClientConfig(new Region("ap-shanghai"));


	/**
	 * 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口 大文件上传请参照 API 文档高级 API 上传
	 * 
	 * @param localFile
	 */
	public static String uploadfile(File localFile) throws CosClientException, CosServiceException {//通过参数传递需要上传的文件,在controller层调用即可

		// 生成cos客户端
		COSClient cosclient = new COSClient(cred, clientConfig);
		String fileName = localFile.getName();
		try {	
			String substring = fileName.substring(fileName.lastIndexOf("."));
			Random random = new Random();
			// 指定要上传到 COS 上的路径,此处看下文
			fileName = "/yuntu/"+random.nextInt(10000) + System.currentTimeMillis() + substring;
			PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName , localFile);
			PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭客户端(关闭后台线程)
			cosclient.shutdown();
		}
		return fileName;
	}
	//在存储桶里获取流文件,展示与页面中
public static COSObjectInputStream showFile(String key){
        // 生成cos客户端
        COSClient cosClient = new COSClient(cred, clientConfig);

        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
        COSObject cosObject = cosClient.getObject(getObjectRequest);
        COSObjectInputStream cosObjectInput = cosObject.getObjectContent();
        return cosObjectInput;
    }	
	/**
     * 
     * @Title: downFile
     * @Description: 下载文件
     * @return
     */
    public static void downFile() {
    	// 生成cos客户端
    	COSClient cosclient = new COSClient(cred, clientConfig);
    	//要下载的文件路径和名称
        String key = "down/demo1.jpg";
     	// 指定文件的存储路径
        File downFile = new File("src/test/resources/mydown.txt");
        // 指定要下载的文件所在的 bucket 和对象键
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
        ObjectMetadata downObjectMeta = cosclient.getObject(getObjectRequest, downFile);
    }
	

	/**
	 * 删除文件
	 * 
	 * @param key
	 */
	public static void deletefile(String key) throws CosClientException, CosServiceException {
		// 生成cos客户端
		COSClient cosclient = new COSClient(cred, clientConfig);
		// 指定要删除的 bucket 和路径
		cosclient.deleteObject(bucketName, key);
		// 关闭客户端(关闭后台线程)
		cosclient.shutdown();
	}
}




至于其中的上传,展示,下载以及删除函数的编写要根据自己的项目实际情况而定,参照链接腾讯云对象存储快速入门 如作者用到的COSObjectInputStream showFile(String key)函数,其含义是传递参数为图片在存储桶中的路径,然后获得存储桶中的对象后返回一个输入流,然后就可以展示在页面中了。(如果小伙伴们在对输入流的操作不熟悉的话,可参照作者制作的一个云相册《云图》,链接见最下文)

如图,作者在自己的存储桶中创建了一个名为yuntu的文件夹,将项目中的图片上传到此文件夹中。 image.png

具体的Controller层需要根据自己项目而定,作者在此不再赘述。

参考链接

云图一个个人的云相册