腾讯云存储上传头像、文件功能(超详细保姆级)

2023-11-10

  • 创建腾讯云,并实名认证

地址:申请腾讯云账号:腾讯云 产业智变·云启未来 - 腾讯

  • 在官网搜索对象存储,点击立即使用

  • 创建存储桶

无脑下一步,唯一注意点就是可以选择共有读写,以及取一个存储桶的名称

 

  • 查看存储桶列表

点击进某个存储桶后,可以上传文件后刷新页面,点击上传后文件名称查看文件地址,通过地址可以直接在页面中打开刚刚上传的文件

  • 与Java整合

在pom文件导入依赖

<!-- 日期工具栏依赖 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>
        <dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.6.97</version>
        </dependency>

查看自己的秘钥

在application.properties配置相关信息

#不同的服务器,地址不同
tencent.cos.file.region=所属地域后面小括号的英文
tencent.cos.file.secretid=秘钥的id
tencent.cos.file.secretkey=秘钥的key
#bucket可以在控制台创建,也可以使用java代码创建
tencent.cos.file.bucketname=你创建的存储桶名称

#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
  • 接下来分别编写存储桶工具类,service,controller接口

工具类:

package com.atguigu.ggkt.vod.utils;

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

/**
 * description
 *
 * @author 王宇翔ヾ
 */
@Component
public class ConstantPropertiesUtil implements InitializingBean {
    //InitializingBean在创建时读取配置文件的值实现赋值
    @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;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = region;
        ACCESS_KEY_ID = secretid;
        ACCESS_KEY_SECRET = secretkey;
        BUCKET_NAME = bucketname;
    }
}

service接口:

package com.atguigu.ggkt.vod.service;

import org.springframework.web.multipart.MultipartFile;

/**
 * description
 *
 * @author 王宇翔ヾ
 */
public interface FileService {
    String upload(MultipartFile file);
}

service的实现类(通过工具类获取对应的值):

注意点:

1.参数MultipartFile表示获取上传的文件信息

2.如上传两次同名文件,后面一个会覆盖前一个,所以需要设置uuid(下面代码已完成设置)

3.可以设置一个文件的父文件名,以当前日期举例2023-4-2

package com.atguigu.ggkt.vod.service.impl;

import com.alibaba.fastjson.JSON;
import com.atguigu.ggkt.vod.service.FileService;
import com.atguigu.ggkt.vod.utils.ConstantPropertiesUtil;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicSessionCredentials;
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 org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * description
 *
 * @author 王宇翔ヾ
 */
@Service
public class FileServiceImpl implements FileService {
    @Override
    public String upload(MultipartFile file) {
        // 1 传入获取到的临时密钥 (tmpSecretId, tmpSecretKey, sessionToken)
        String tmpSecretId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String tmpSecretKey = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
        String endpoint = ConstantPropertiesUtil.END_POINT;
        String sessionToken = "TOKEN";
        BasicSessionCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);
        // 2 设置 bucket 的地域
        // clientConfig 中包含了设置 region, https(默认 http),
        // 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分
        Region region = new Region(ConstantPropertiesUtil.END_POINT); //COS_REGION 参数:配置成存储桶 bucket 的实际地域,例如 ap-beijing,更多 COS 地域的简称请参见 https://cloud.tencent.com/document/product/436/6224
        ClientConfig clientConfig = new ClientConfig(region);
        // 3 生成 cos 客户端
        COSClient cosClient = new COSClient(cred, clientConfig);
        try{
            // 指定要上传的文件
            InputStream inputStream = file.getInputStream();
            // 指定文件将要存放的存储桶
            // 指定文件上传到 COS 上的路径,即对象键。例如对象键为folder/picture.jpg,则表示将文件 picture.jpg 上传到 folder 路径下
            //上传同名的文件,后面会覆盖掉前面的,需要添加uuid让文件名不重复,并且为了美观可以将-去掉
            String key = UUID.randomUUID().toString().replaceAll("-","")+
                    file.getOriginalFilename();
            //对文件可以进行分组处理,比如当前2023/4/2,通过刚刚添加的依赖
            /**
             *  日期工具栏依赖
             *     <dependency>
             *         <groupId>joda-time</groupId>
             *         <artifactId>joda-time</artifactId>
             *     </dependency>
             */
            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));
            //返回上传文件的路径
            //https://yu-1317492111.cos.ap-beijing.myqcloud.com/2.jpg
            String url = "https://"+bucketName+"."+"cos"+"."+endpoint+".myqcloud.com"+"/"+key;
            return url;
        } catch (Exception clientException) {
            clientException.printStackTrace();
            return null;
        }

    }
}

controller:

这里我使用的是swagger接口文档,如使用其他的可以把@Api、@ApiOperation注解删除

返回类Result是自己编写的,可以使用你熟悉的Map,或者你自己定义的结果类

package com.atguigu.ggkt.vod.controller;

import com.atguigu.ggkt.result.Result;
import com.atguigu.ggkt.vod.service.FileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
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.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * description
 *
 * @author 王宇翔ヾ
 */
@Api(tags = "文件上传接口")
@RestController
@RequestMapping("/admin/vod/file")
public class FileUploadController {
    @Resource
    private FileService fileService;
    /**
     * 文件上传
     */
    @ApiOperation(value = "文件上传")
    @PostMapping("upload")
    public Result upload(//MultipartFile用于接收文件
            @ApiParam(name = "file", value = "文件", required = true)
            @RequestParam("file") MultipartFile file) {
        String url = fileService.upload(file);
        return Result.ok(url).message("文件上传成功");
    }
}

  • 测试文件上传接口

1.使用你熟悉的接口测试工具,这里使用的是swagger

 

2.查看腾讯云存储桶是否有文件

可以看到一个以当前日期为名称的文件夹,里面上传的图片就是通过uuid加密后的文件,可以进行预览

以上就是腾讯云上传文件的全部内容了

 如有空余时间,也会多多编写文章帮助大家开发~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

腾讯云存储上传头像、文件功能(超详细保姆级) 的相关文章

  • 一文学会目前最火热的大数据技术

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由michelmu发表于云 社区专栏 Elasticsearch是当前主流的分布式大数据存储和搜索引擎 可以为用户提供强大的全文本检索能力 广泛应用于日志检索 全站搜索等领域 L
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法

    简介 相信阿里云服务器ECS已被广大的企业和个人站长所使用 但对于之前没有使用过阿里云服务器的新手小白来说 无疑是一头雾水 今天呢 服务器吧小编就给刚接触阿里云ECS的新手小白带来快速入门阿里云服务器的方法 相信阿里云服务器ECS已被广大的
  • 关于宝塔面板无法访问的解决方法

    前言 本篇文章主要介绍宝塔面板无法访问的几种情况以及如何解决 正文 1 没有开放相应端口 这种情况比较常见 服务商默认情况下会将所有的端口关闭 你需要使用哪个端口就得手动去打开这个端口 例如 http 47 8888 adminuser 中
  • 课时 17 自测题

    以下说法错误的是 单选题 A etcd 适合存储频繁变化的数据 B etcd 使用 go 语言编写 C etcd 是一个分布式系统 通常由多个 server 组成一个集群 etcd 满足了 CAP 原理中的哪些特性 单选题 A CA B C
  • ECS共享型s6和ECS突发性能型t6的区别选择哪个好?

    WP建站 一个专注于wordpress学习的 关注他 2 人赞同了该文章 这两个类型的阿里云ecs服务器的话 一般在这两个中二选一的话我们建议优先选择ECS共享型s6 我们简单的来说说他们的一些区别和特点吧 首先我们要知道的是他们都是独立的
  • 如何设计一个麻雀般的微型分布式架构?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由mariolu 发表于云 社区专栏 序言 初衷 设计该系统初衷是基于描绘业务 或机器集群 存储模型 分析代理缓存服务器磁盘存储与回源率的关系 系统意义是在腾讯云成本优化过程中
  • 腾讯云前端面经

    腾讯云招聘一共四面 第一面是你以后的同事面试 主要考察基础知识 第二面是以后的直属领导 会考察基础原理 以及和职位的匹配度 三面是主管 考察项目等整体 四面为hr面试 一面 一面都比较基础 涉及js vue和网络安全 1 自我介绍 单纯的自
  • 快速玩转 Llama2!机器学习 PAI 最佳实践(二)—全参数微调训练

    前言 近期 Meta 宣布大语言模型 Llama2 开源 包含7B 13B 70B不同尺寸 分别对应70亿 130亿 700亿参数量 并在每个规格下都有专门适配对话场景的优化模型Llama 2 Chat Llama2 可免费用于研究场景和商
  • 腾讯云 API 网关产品发布

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 腾讯云已在近期上线了 API 网关产品 协助开发者通过简单方式即可完成 API 配置管理 发布版本 访问控制等功能 并可进一步对接腾讯云云市场中的 API 市场 参与到 API 经济的
  • 【Docker 基础教程】Centos7.5安装Docker并配置阿里云镜像

    文章目录 前言 安装docker 前置条件 测试并运行一个实例 安装命令 安装结果 建立一个容器 配置阿里云镜像 第一步 第二步 第三步 第四步 第五步 以下方式二选一 直接复制黏贴 分步创建 前言 前面一篇文章介绍到了Docker的基本概
  • 从零开始:在腾讯云轻量服务器上安装Docker,实现快速开发和部署!

    本文指导您如何在 零基础轻量应用服务器上安装 Docker 以及使用 Docker 镜像源加速镜像下载 好了 没有废话 让我们开始行动吧 第一步 购买服务器 小编买的是 腾讯的 1年446RMB 下载链接如下 学生云服务器 学生云主机 学生
  • TVP新书上架

    新书速递 近期 在腾讯云 TVP 联合出书计划中 腾讯云 TVP 山金孝老师推出了新书 融合 产业数字化转型的十大关键技术 融合 产业数字化转型的十大关键技术 作者 山金孝 李琦 中译出版社 内容简介 数字经济已成为高质量发展的新引擎 数字
  • 千万并发连接下,如何保障网络性能

    点击一键订阅 云荐大咖 专栏 获取官方推荐精品内容 学技术不迷路 过去几十年互联网呈爆发式的增长 内容的丰富以及层出不穷的DDoS攻击等 对网络性能提出了极大的挑战 也同样促进了网络基础设施的快速发展 运营商的带宽越来越大 CPU 网卡等硬
  • 阿里云ftp配置

    yum install vsftpd 安装ftp rpm Uvh http mirror centos org centos 6 os x86 64 Packages ftp 0 17 54 el6 x86 64 rpm 安装ftp插件 v
  • 基于腾讯云手把手教你搭建网站

    目录 前言 前期准备工作 具体搭建网站 番外篇 网站开发及优化 结束语 前言 在当今数字化时代浪潮之下 作为开发者拥有一个属于自己的网站是非常有必要的 也是展示个人形象 打造影响力和给别人提供服务的重要途径 网站不仅可以作为打造自己影响力的
  • 阿里云服务器有WordPress还可以再安装宝塔面板吗?

    不推荐 宝塔面板要求必须是纯净的操作系统环境安装宝塔 否则可能会有问题的 所以最好是先安装宝塔面板 再去安装wordpress 原文地址 阿里云服务器 WordPress 还可以再安装宝塔面板吗 轻量云Cloud WordPress一款广泛
  • 腾讯云用centos还是ubuntu系统好?

    腾讯云服务器提供了多种操作系统选择 包括 CentOS Ubuntu Windows Server 等 用户可以根据自己的需求和习惯选择适合的操作系统 通常比较推荐安装centos 7 x版本的系统 但在 CentOS 和 Ubuntu 之
  • 腾讯云HAI:人人都可无门槛AI作画!

    目录 前言 关于HAI HAI优势 开启HAI使用 清理资源 体验心得 结束语 参考文献 前言 随着科技的不断进步和数据驱动的时代到来 越来越多的开发者和数据研究人员需要强大的计算能力来支持他们的工作 尤其是在处理大规模数据 进行机器学习和
  • 阿里云添加二级域名

    阿里云添加二级域名 1 申请配置域名 1 1 购买域名 1 2 登录到阿里云服务器控制台 进入云解析DNS页面 1 3 点击 域名解析 1 4 点击 添加记录 1 5 进行txt校验 1 6 添加记录
  • 阿里云2核4G服务器优惠价格30元3个月?小心坑

    2024年阿里云2核4G服务器优惠价格30元3个月 活动 https t aliyun com U bLynLC 配置为云服务器ECS经济型e实例ecs e c1m2 large 3M固定带宽 系统盘为40GB ESSD Entry 活动打

随机推荐

  • 类外访问类的私有(保护)成员

    在C 中类外访问类的私有 private 或保护 protected 成员变量 有以下几种方法 1 通过在类中定义共有的成员函数 用成员函数去调用类的私有成员变量 在类外就可以实现对私有成员变量的访问 2 在类外实例化一个类的对象 定义一个
  • 安全仔的2023年暑期实习面试经历

    大二在校菜鸡 之前下定决心想在暑假去公司实习 投了几家 将面试经历发给大家 观安信息 岗位 渗透测试实习 一面 技术面 自我介绍 介绍大学怎么接触安全 有什么经历 网络攻防夏令营 ctf冬令营 有什么项目 SRC渗透测试挖掘 先问了项目的情
  • Valine 一款快速、简洁且高效的无后端评论系统

    Valine 一款快速 简洁且高效的无后端评论系统 简介 Valine 诞生于2017年8月7日 是一款基于LeanCloud的快速 简洁且高效的无后端评论系统 理论上支持但不限于静态博客 目前已有Hexo Jekyll Typecho H
  • 干货分享:SparkBench--Spark平台的基准性能测试

    SparkBench简介 SparkBench是Spark的基准性能测试项目 由来自IBM Watson研究中心的五位研究者 Min Li Jian Tan Yandong Wang Li Zhang Valentina Salapura
  • NoClassDefFoundError: Could not initialize class……

    一 背景 在做一次应用更新发布的时候 应用发布完成 但是请求访问的时候报了NoClassDefFoundError异常 出现了如下错误 二 问题猜测及分析 1 项目打包有问题或者打包不完整 导致缺少类文件 所以初始化加载失败 重新打包 并在
  • 【Espruino】NO.17 使用平板电脑调试Espruino(OTG方式)

    http blog csdn net qwert1213131 article details 38068379 本文属于个人理解 能力有限 纰漏在所难免 还望指正 小鱼有点电 Espruino中文社区 本节内容主要是讲如何用平板电脑调试E
  • 定义列表

    dl dt 槟榔 dt dd 湖南 海南产 dd dd 有提神作用 dd dd 吃多了不好 dd dd 有点贵 dd dl
  • JAVA 关键字介绍 strictfp

    JAVA虽然具有跨平台性 但是各个平台对浮点数的运算操作是不相同的 所以在不同平台上进行的浮点数操作所得到的结果可能不同 strictfp 强制规定各个平台上进行一套标准的浮点数操作 浮点规范IEEE 754 以降低性能为代价 当一个类被s
  • Latex中如何实现图并列/表并列/以及混合并列排版以及双列变单列

    一 图并列2 2排版 两外的1 2都可以参考下列代码 begin figure htbp centering begin minipage 0 49 linewidth 表示图片的占用那一列的宽度 centering vspace 0 6c
  • java8 32位和64位资源分享 Windows 版本:8u311

    阿里云盘 Java8u311 点击链接保存 或者复制本段内容 打开 阿里云盘 APP 无需下载极速在线查看 视频原画倍速播放 链接 https www aliyundrive com s RK8wK2m41bv 百度云盘 链接 https
  • 每个前端人都应该看看的Vue3开源项目

    从目前的一线面试经验来看 八股文跟吃饭一样已经麻了 而项目题 场景题才是面试官考察的重点和加分项 正好我之前整理过一份全网爆火且值得学习的前端实战资料 这里无偿分享出来以便大家突击提升技术 另外还有前端必备基础资料 可帮助大家实战 理论双重
  • LeetCode(Python)—— 最后一个单词的长度(简单)

    最后一个单词的长度 概述 给你一个字符串 s 由若干单词组成 单词前后用一些空格字符隔开 返回字符串中最后一个单词的长度 单词是指仅由字母组成 不包含任何空格字符的最大子字符串 输入 s Hello World 输出 5 输入 s fly
  • on project rocketmq-dashboard: Failed to run task: ‘yarn install’ failed. org.

    最新Windows环境下搭建RocketMQ及其控制台环境 1 搭建RocketMQ 1 1 下载RocketMQ 官网下载地址 https rocketmq apache org release notes 选择合适的版本下载Binary
  • 黄平书-线接触热弹流润滑 Fortran+Matlab转译代码

    原Fortran代码有错误 进行了修改 数值上差别不大 根据Fortran代码转的Matlab 可以完美运行 但是因为精度问题有差异 只能说趋势是一致的 需要私我 资源里只是Fortran运行结果
  • 2023华为OD机试真题【恢复数字序列】

    题目内容 对于一个连续正整数组成的序列 可以将其拼接成一个字符串 再将字符串里的部分字符打乱顺序 如序列8 9 10 11 12 拼接成的字符串为89101112 打乱一部分字符后得到90811211 原来的正整数10就被拆成了0和1 现给
  • 程序员Linux学到什么程度,Linux学到什么程度,才可以找到合适的工作?

    首先我说一下我的学习路线吧 我是学习java出生的 懂编程的人都知道 一般我们程序员用开发系统 大多数都是在linux系统上开发的 在最开始的时候把我哥给了我一本书 我名字就叫鸟哥的私房菜 这本书非常不错 非常适合刚入门的新手看学习 里面讲
  • python中定时执行脚本

    python中定时执行脚本 引入time os sched 这三个是必备的 import time os sched def ll num print 123123456 with open tt txt ab as txt txt wri
  • Spring Cloud Edgware新特性之九:Sleuth使用MQ方式整合Zipkin

    原文 http www itmuch com spring cloud edgware new sleuth zipkin mq 众所周知 Spring Cloud Sleuth有两种方式整合Zipkin HTTP直连Zipkin方式 MQ
  • 微众银行蝉联入选《福布斯》全球区块链50强

    美东时间2023年2月7日 福布斯 杂志公布2023年全球区块链50强榜单 微众银行蝉联入选 微众银行因联合多方共建开源联盟链生态圈 以及基于DDTP Distributed Data Transfer Protocol 分布式数据传输协议
  • 腾讯云存储上传头像、文件功能(超详细保姆级)

    创建腾讯云 并实名认证 地址 申请腾讯云账号 腾讯云 产业智变 云启未来 腾讯 在官网搜索对象存储 点击立即使用 创建存储桶 无脑下一步 唯一注意点就是可以选择共有读写 以及取一个存储桶的名称 查看存储桶列表 点击进某个存储桶后 可以上传文