首页 > 其他分享 >使用腾讯云对象存储——图片

使用腾讯云对象存储——图片

时间:2023-05-25 21:34:10浏览次数:37  
标签:存储 String cos qcloud file 腾讯 import com 图片

选择需要使用的存储桶


找到密匙


引入依赖

		<!-- 日期工具栏依赖 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.9</version>
        </dependency>
        <!-- 腾讯云cos存储 -->
        <dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.6.54</version>
        </dependency>

可以先进行测试

package com.yhn.file;
import com.alibaba.fastjson.JSON;
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 java.io.File;
/**
 * @Description
 * @Author YeHaoNan~
 * @Date 27/12/2022 20:53
 * @Version 1.0.0
 **/
public class FileTest {
    public static void main(String[] args) {
        // 1 初始化用户身份信息(secretId, secretKey)。
        // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
        String secretId = "secretId ";
        String secretKey = "secretKey ";
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
        // 存储桶所属的区域
        Region region = new Region("你的地址");
        ClientConfig clientConfig = new ClientConfig(region);
        // 这里建议设置使用 https 协议
        // 从 5.6.54 版本开始,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);

        try{
            // 指定要上传的文件
            File localFile = new File("E:\\01.png");
            // 指定文件将要存放的存储桶
            String bucketName = "存储桶名称";
            // 指定文件上传到 COS 上的路径,即对象键。例如对象键为folder/picture.jpg,则表示将文件 picture.jpg 上传到 folder 路径下
            String key = "test.png";
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
            System.out.println(JSON.toJSONString(putObjectResult));
        } catch (Exception clientException) {
            clientException.printStackTrace();
        }

    }
}

把 对象存储整合到 Springboot 项目里面去使用

region 代表着你的存储桶的区域
bucketname 代表着存储桶的名称
secretid 密匙的 id
secretkey 密匙的 key

spring.servlet.multipart.max-file-size=1024MB
spring.servlet.multipart.max-request-size=1024MB

不同的服务器,地址不同

tencent.cos.file.region=region
tencent.cos.file.secretid=secretid
tencent.cos.file.secretkey=secretkey
#bucket可以在控制台创建,也可以使用java代码创建
tencent.cos.file.bucketname=存储桶名称

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/security?characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

读取配置文件

package com.yhn.util;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 常量类,读取配置文件application.properties中的配置
 * 实现InitializingBean接口
 * 该接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。
 */
@Component
public class ConstantPropertiesUtil implements InitializingBean {

    // @Value ("${xxx}")  将配置文件 *.properties 或 *. yml  里 配置的 属性  注入
    @Value("${tencent.cos.file.region}")
    private String region;

    @Value("${tencent.cos.file.secretid}")
    private String secretId;

    @Value("${tencent.cos.file.secretkey}")
    private String secretKey;

    @Value("${tencent.cos.file.bucketname}")
    private String bucketName;

    public static String END_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;

    //spring bean的初始化执行顺序:构造方法 -> @PostConstruct注解的方法 -> afterPropertiesSet方法 --> init-method指定的方法。
    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = region;
        ACCESS_KEY_ID = secretId;
        ACCESS_KEY_SECRET = secretKey;
        BUCKET_NAME = bucketName;
        System.out.println(
                        "END_POINT:" + END_POINT    +   "," +
                        "CCESS_KEY_ID:" + ACCESS_KEY_ID + ","+
                        "ACCESS_KEY_SECRET : "  + ACCESS_KEY_SECRET + "," +
                        "BUCKET_NAME "  + BUCKET_NAME
        );
    }
}

Controller

package com.yhn.controller;

import com.yhn.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping("/file")
public class FileUploadController {
    @Autowired
    private FileService fileService;
    /**
     * 文件上传
     */
    @PostMapping("/upload")
    public String upload( @RequestParam("file") MultipartFile file) {
        String uploadUrl = fileService.upload(file);
        System.out.println(uploadUrl);
        return uploadUrl;
    }
}

Service

public interface FileService {
    //文件上传
    String upload(MultipartFile file);
}
package com.yhn.service.impl;

import com.alibaba.fastjson.JSON;
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.http.HttpProtocol;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import com.yhn.service.FileService;
import com.yhn.util.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.UUID;

@Service
public class FileServiceImpl implements FileService {
    @Override
    public String upload(MultipartFile file) {
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = ConstantPropertiesUtil.END_POINT;

        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
        // 1 初始化用户身份信息(secretId, secretKey)。
        String secretId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String secretKey = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);

        // 2 设置 bucket 的地域
        // clientConfig 中包含了设置 region, https(默认 http),超时, 代理等 set 方法
        Region region = new Region(ConstantPropertiesUtil.END_POINT);
        ClientConfig clientConfig = new ClientConfig(region);
        // 这里建议设置使用 https 协议
        // 从 5.6.54 版本开始,默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);

        try{
            // 指定要上传的文件
            InputStream inputStream = file.getInputStream();
            // 指定文件将要存放的存储桶
            // 指定文件上传到 COS 上的路径,即对象键。例如对象键为folder/picture.jpg,则表示将文件 picture.jpg 上传到 folder 路径下
            String key = UUID.randomUUID().toString().replaceAll("-","")+
                    file.getOriginalFilename();
            String dateUrl = new DateTime().toString("yyyy/MM/dd");
            key = dateUrl+"/"+key;

            ObjectMetadata objectMetadata = new ObjectMetadata();
            PutObjectRequest putObjectRequest =
                    new PutObjectRequest(bucketName, key, inputStream,objectMetadata);
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
            System.out.println(JSON.toJSONString(putObjectResult));
            String url = "https://"+bucketName+"."+"cos"+"."+endpoint+".myqcloud.com"+"/"+key;
            return url;
        } catch (Exception clientException) {
            clientException.printStackTrace();
            return null;
        }
    }
}

标签:存储,String,cos,qcloud,file,腾讯,import,com,图片
From: https://www.cnblogs.com/newTuiMao/p/17432974.html

相关文章

  • RHEL8使用iSCSI部署网络存储-Linux就这么学17
        本章首先介绍计算机硬件存储设备的不同接口的优缺点,并由此切入iSCSI技术主题的讲解。iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户能够通过互联网方便地访问远程机房提供的共享存储资源。我们将学习在Linux系统上部署iSCSI服务端程序,并分别......
  • MySQL存储引擎精简版
    存储引擎简介概念:其是存储数据,建立索引,更新查询数据等操作的技术支持,引擎是基于表的,所以又称表结构常见分类InnoDBMySQL5.5之后默认引擎特点:1.操作遵循ACID原则,支持事务2.支持行锁3,支持外键约束MyISAMMySQL早期默认引擎特点:1.不支持事务和外键约束,支持表锁......
  • WPS word文档插入图片显示不全
    一、右键段落二、行距由"固定值"修改为"单倍行距"......
  • 多客社交圈子小程序的腾讯云实时音视频如何配置配置,适用于语音直播、交友类圈子系统un
    采用的腾讯的实时语音,经过我们对比和测试,腾讯的是最便宜的。新用户免费1万分钟,以后每1000分钟7元。第一步、腾讯云申请实时语音,实时音视频免费试用-购买指南-文档中心-腾讯云新用户免费可领取资源包1万分钟。第二步、添加应用后拿到appid和秘钥。填写在前端的配置文件里,根目录/sit......
  • 基于Qt的音乐播放器(三)通过酷狗音乐的api接口,返回json格式歌曲信息(播放地址,歌词,图片)
    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票!我的投票地址:点击为我投票文章目录前言1.获取歌曲搜索列表api接口2.获取单个歌曲详细信息包括歌词3.总结前言首先说明,本教程仅供个人学习,研究使用,禁止用于任何的商业和非法用途。(手动狗头)之所以要研究这个,是因为我想......
  • 腾讯云云服务器Centos系统安装MySQL数据库详细教程
    文章目录一.前言二.教程一.前言      今天是2021年的2月2日,可以说我把一件压在心底很久的一件事做了,今天我用代金卷买了4个月的云服务器,申请了备案,并且配置了MYSQL,有兴趣的可以往下看看,如果是奔着标题来了的,可以直接看下面。      我本身是学c/c++这一类方向的,网......
  • Fdog系列(三):使用腾讯云短信接口发送短信,数据库写入,部署到服务器,web收尾篇。
    文章目录1.前言2.使用腾讯云短信接口发送短信3.java连接数据库4.部署到服务器(如果你有的话)目录Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。Fdog系列(二):html写完注册页面之后怎么办,用java写后台响应呀。文章中出现的源码获取方式:评论区留下邮箱地址。创作......
  • Esxi6.7 添加硬盘时提示 无法创建 VMFS 数据存储 - 无法更改主机配置 Group2 Raid5
     ESXI添加硬盘时提示无法创建VMFS数据存储-无法更改主机配置1.打开ESXI的SSH2.找到不能添加的硬盘路径3.用SSH操作 1.打开ESXI的SSH2.找到不能添加的硬盘路径我的是**个,找到你要添加但是不能添加的那个硬盘,点进去。完整的路劲为:比如我的:/vmfs/devices/disk......
  • 直播系统app源码,图片放大且有渐变色罩层出现
    直播系统app源码,图片放大且有渐变色罩层出现 <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>5</title><style>.mask1,.text{position:relative;overflow:hidden;width:800px;height:500px;transition:all.5s;}    ......
  • 发布 markdown 小功能:指定图片尺寸
    之前园子的markdown功能多年落后,这两年我们正在努力赶上。今天发布一个markdown小功能,可以通过markdown语法指定图片尺寸。指定宽度=200x![](https://img2023.cnblogs.com/blog/35695/202305/35695-20230503220505053-573338604.png=200x)指定高度=x300![](https:......