您的位置:首页 > 编程语言 > Java开发

腾讯云对象存储的完整教程,java将文件上传到腾讯云上后返回可以访问的连接

2019-01-22 19:28 232 查看

   先前使用的是七牛云,是挺好用的,但是七牛对于测试域名有一个月的时间限制。测试域名失效后上传的图片等文件就不能访问了。但是腾讯云每个注册的账户有50G的对象存储的空间。而且没有时间限制。所以就采用腾讯的的对象存储。

具体步骤分为以下三步:

①:将文件上传到tomcat下

②:将上传到tomcat下的文件上传到腾讯云对象存储中

③:解析返回的连接,获得可直接访问的连接地址

第一步:

将文件上传到tomcat下,这个就不多说了,这个都玩的不太灵活的同学就暂时先温习下以前存储下来的只是吧。下面我把核心代码的贴上。

       // 设置图片名称,不能重复,可以使用uuid
        String picName = UUID.randomUUID().toString();
        // 获取文件的原始路径这个文件夹是创建在项目下面的自己手动创建
        String path = request.getSession().getServletContext().getRealPath("/picture");
        picName = picName.replaceAll("-", "");
        // 获取文件名
        String oriName = pictureFile.getOriginalFilename();
        // 获取图片后缀
        String extName = oriName.substring(oriName.lastIndexOf("."));
        // 整合新的文件名加后缀
        String newName = "/" + picName + extName;
        // 上传到服务器上的地址
        String tomPath = path + newName;
        // 开始将文件上传到tomcat的文件目录下
        pictureFile.transferTo(new File(path + "/" + newName));

具体的参见上传资源。

第二步:最重要的部分

将在tomcat下的文件上传到腾讯云上。

引入依赖:(此方法必须使用此依赖)

/**
 * 特别注意:此版本代码必须使用此依赖 
 * <!-- 腾讯云上传依赖 --> 
 * <dependency> 
 *   <groupId>com.qcloud</groupId>
 *    <artifactId>cos_api</artifactId> 
 *   <version>5.2.4</version> 
 * </dependency>
 * <dependency> 
 *   <groupId>com.qcloud</groupId>
 *    <artifactId>qcloud-java-sdk</artifactId>
 *   <version>2.0.1</version>
 * </dependency>
 *
 */

核心代码:

        // 直接传一个路径进来就好啦
        File cosFile = new File(tomPath);
        // 将密钥配置进去
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置bucket的区域, COS地域的简称请参照
        ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
        // 3 获得cos客户端
        COSClient cosClient = new COSClient(cred, clientConfig); 

        //这个需要根据的自己的服务器的情况配置
        String bucketName = "XXXXXXXXXX";
        // 设置上传文件的存储位置
        String key = "image/" + cosFile.getName();
        // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口
        // 大文件上传请参照 API 文档高级 API 上传
        // 指定要上传到 COS 上的路径
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, cosFile);
        cosClient.putObject(putObjectRequest);
        // 关闭客户端
        cosClient.shutdown();
        Date expiration = new Date(new Date().getTime() + 5 * 60 * 10000);
        URL oldurl = cosClient.generatePresignedUrl(bucketName, key, expiration);
        // 获得链接后解析字符串并且返回
        // 先将url转换为字符串

       第三步:获得上传后的文件的链接
        String url = oldurl.toString();
        // http://jobpic-1258185724.cos.ap-guangzhou.myqcloud.com/image/T.jpg?sign
        // 直接查找到第一个?的位置
        url = url.substring(0, url.indexOf("?"));
        // 开始解析字符串
        return url;

至此文件的上传到腾讯上就完成啦。

下面是我写的完整的代码:仅供参考。

package com.hsd.tx.util;

import java.io.File;
import java.net.URL;
import java.util.Date;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

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.model.PutObjectRequest;
import com.qcloud.cos.region.Region;

/**
 * @ClassName: TxFileUploadUtil
 * @Description: 腾讯云图片上传的工具类
 * @date 2019年1月19日 下午3:46:36
 * @author lpjz@foxmail.com
 * 
 */
/**
 * 特别注意:此版本代码必须使用此依赖 
 * <!-- 腾讯云上传依赖 --> 
 * <dependency> 
 *   <groupId>com.qcloud</groupId>
 *    <artifactId>cos_api</artifactId> 
 *   <version>5.2.4</version> 
 * </dependency>
 * <dependency> 
 *   <groupId>com.qcloud</groupId>
 *    <artifactId>qcloud-java-sdk</artifactId>
 *   <version>2.0.1</version>
 * </dependency>
 *
 */
// 这个方法是专门用来上传SSM框架下的文件的
// 前提条件是:①:在requestMapper的方法中必须接收HttpServletRequest,MultipartFile作为参数,然后传入此方法中
public class TxFileUploadUtil {

    //根据自己实际情况去配置
    private static String secretId = "XXXXXXXXXXXXXXXXX";
    private static String secretKey = "XXXXXXXXXXXXXXXXX";

    public static String upLoadSSM(HttpServletRequest request, MultipartFile pictureFile) throws Exception {
        // 设置图片名称,不能重复,可以使用uuid
        String picName = UUID.randomUUID().toString();
        // 获取文件的原始路径这个文件夹是创建在项目下面的自己手动创建
        String path = request.getSession().getServletContext().getRealPath("/picture");
        picName = picName.replaceAll("-", "");
        // 获取文件名
        String oriName = pictureFile.getOriginalFilename();
        // 获取图片后缀
        String extName = oriName.substring(oriName.lastIndexOf("."));
        // 整合新的文件名加后缀
        String newName = "/" + picName + extName;
        // 上传到服务器上的地址
        String tomPath = path + newName;
        // 开始将文件上传到tomcat的文件目录下
        pictureFile.transferTo(new File(path + "/" + newName));
        // 直接传一个路径进来就好啦
        File cosFile = new File(tomPath);
        // 将密钥配置进去
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置bucket的区域, COS地域的简称请参照具体情况;希望引用的时候注意
        ClientConfig clientConfig = new ClientConfig(new Region("XXXXXXX"));
        // 3 获得cos客户端
        COSClient cosClient = new COSClient(cred, clientConfig);

       //在腾讯上创建的桶的名称
        String bucketName = "XXXXXXX";
        // 设置上传文件的存储位置
        String key = "image/" + cosFile.getName();
        // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口
        // 大文件上传请参照 API 文档高级 API 上传
        // 指定要上传到 COS 上的路径
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, cosFile);
        cosClient.putObject(putObjectRequest);
        // 关闭客户端
        cosClient.shutdown();
        Date expiration = new Date(new Date().getTime() + 5 * 60 * 10000);
        URL oldurl = cosClient.generatePresignedUrl(bucketName, key, expiration);
        // 获得链接后解析字符串并且返回
        // 先将url转换为字符串
        String url = oldurl.toString();
        // http://jobpic-1258185724.cos.ap-guangzhou.myqcloud.com/image/T.jpg?sign
        // 直接查找到第一个?的位置
        url = url.substring(0, url.indexOf("?"));
        // 开始解析字符串
        return url;
    }

    // 如果是采用其他的方式添加文件则采用此方法
    public static String upLoad(String tomPath) throws Exception {
        File cosFile = new File(tomPath);
        // 将密钥配置进去
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置bucket的区域, COS地域的简称请参照
        ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
        // 3 获得cos客户端
        COSClient cosClient = new COSClient(cred, clientConfig);
        String bucketName = "jobpic-1258185724";
        // 设置上传文件的存储位置
        String key = "image/" + cosFile.getName();
        // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口
        // 大文件上传请参照 API 文档高级 API 上传
        // 指定要上传到 COS 上的路径
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, cosFile);
        cosClient.putObject(putObjectRequest);
        // 关闭客户端
        cosClient.shutdown();
        Date expiration = new Date(new Date().getTime() + 5 * 60 * 10000);
        URL oldurl = cosClient.generatePresignedUrl(bucketName, key, expiration);
        // 获得链接后解析字符串并且返回
        // 先将url转换为字符串
        String url = oldurl.toString();
        // http://jobpic-1258185724.cos.ap-guangzhou.myqcloud.com/image/T.jpg?sign
        // 直接查找到第一个?的位置
        url = url.substring(0, url.indexOf("?"));
        // 开始解析字符串
        return url;

    }
}
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐