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

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(使用前将#替换为@)

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

  • 阿里云CDN缓存预热与刷新以及常见的故障汇总

    文章目录 1 为CDN缓存的文件增加过期时间 2 CDN缓存预热配置 3 CDN缓存刷新配置 4 常见故障 CDN缓存预热指的是主动将要缓存的文件推送到全国各地的CDN边缘加速器上 减少回源率 提供命中率 缓存刷新指的是后期上传了同名的文件
  • 如何免费体验腾讯云虚拟主机(云服务器)

    最近调Android程序 访问不到局域网内的服务器 是在没有办法了就搞了台腾讯云的虚拟主机 不得不说 比起那些香港的三线品牌虚拟主机体验好了许多 配置属于乞丐版 1GHz CPU 1GB RAM 50GB 系统盘 30GB数据盘 对于广大学
  • 聊聊技术专家谈阿里云史诗级故障

    序言 什么是技术专家 其实也是很懂 是做的时间足够长呢 还是说经历的厂比较多 还是说纸上谈兵比较牛逼 专家嘛 大家都懂的 只会弹别人 喔 是谈别人 原来不是弹 有本事技术专家谈谈自己呗 风言风语 阿里云出现史诗级故障 处理的时间足够长 然后
  • 2022年 hust OJ 最新搭建方式

    文章目录 一 准备环境 二 hust oj 搭建 三 踩坑 一 准备环境 1核2G 服务器一台 腾讯云 阿里云均可 现在可能买不到了 2核2G 的也可以 xshell windterm 连接服务器的工具 二 hust oj 搭建 HustO
  • ECS共享型s6和ECS突发性能型t6的区别选择哪个好?

    WP建站 一个专注于wordpress学习的 关注他 2 人赞同了该文章 这两个类型的阿里云ecs服务器的话 一般在这两个中二选一的话我们建议优先选择ECS共享型s6 我们简单的来说说他们的一些区别和特点吧 首先我们要知道的是他们都是独立的
  • 放大倍数超5万倍的Memcached DDoS反射攻击,怎么破?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 作者 腾讯游戏云 背景 Memcached攻击创造DDoS攻击流量纪录 近日 利用Memcached服务器实施反射DDoS攻击的事件呈大幅上升趋势 DDoS攻击流量首次过T 引发业界
  • 腾讯云前端面经

    腾讯云招聘一共四面 第一面是你以后的同事面试 主要考察基础知识 第二面是以后的直属领导 会考察基础原理 以及和职位的匹配度 三面是主管 考察项目等整体 四面为hr面试 一面 一面都比较基础 涉及js vue和网络安全 1 自我介绍 单纯的自
  • KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎

    来源 阿里巴巴云原生公众号 美国西部时间 2020 年 11 月 18 日 在云原生技术 最高盛宴 的 KubeCon 北美峰会 2020 上 CNCF 应用交付领域小组 CNCF SIG App Delivery 与 Open Appli
  • 腾讯云 API 网关产品发布

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

    kata containers的阿里云镜像仓库地址 关键字 kata containers 阿里云 镜像 kata containers需要安装在Centos8 如下为 etc yum repos d kata containers的内容
  • 巴比特

    摘要 9 月 13 日 阿里云宣布通义千问大模型已首批通过备案 并正式向公众开放 百度发布文心一言插件生态平台 灵境矩阵 向广大开发者开启邀测 并提供百亿流量 亿元基金等激励措施 扶持插件生态建设 图片来源 由无界AI生成 热点资讯 百度发
  • 云服务器是什么? 云服务器有哪些选择?

    欢迎前往我的个人博客云服务器查看更多关于云服务器和建站等相关文章 随着互联网技术的发展和云计算技术的应用 越来越多的企业倾向于使用云服务器来满足其不断增长的计算需求 云服务器是一种基于云计算技术的虚拟服务器 它能够为企业提供高性能 可靠 灵
  • TVP新书上架

    新书速递 近期 在腾讯云 TVP 联合出书计划中 腾讯云 TVP 山金孝老师推出了新书 融合 产业数字化转型的十大关键技术 融合 产业数字化转型的十大关键技术 作者 山金孝 李琦 中译出版社 内容简介 数字经济已成为高质量发展的新引擎 数字
  • 应用编排与管理:核心原理

    本节课程要点 K8s 资源的重要元信息 使用阿里云服务演示一下如何去修改或查看 K8s 重要元数据 详细分析控制器模式 总结控制器模式特点 资源元信息 1 Kubernetes 资源对象 首先 我们来回顾一下 Kubernetes 的资源对
  • 阿里云盘正式上架,速度25MB/s!(附下载链接+邀请码)

    今年 8 月 阿里巴巴推出了一款名为 阿里云网盘 的独立 App 定位为C端用户提供服务 网盘空间更大 下载速度更快 但之后很快这款App就下架了 也许是阿里没有准备好 在经历过几个月的完善之后现在又重新上架了 11月18日消息 阿里云网盘
  • Anaconda学习

    Anaconda conda 创建 激活 退出 删除虚拟环境 Anaconda超详细教程2023 7 10 windows 网络连接错误 1 首先学习anaconda是什么 Anaconda 官方网站 就是可以便捷获取包且对包能够进行管理
  • 【腾讯云云上实验室】个人对腾讯云向量数据库的体验心得

    目录 前言 Tencent Cloud VectorDB概念 使用初体验 腾讯云向量数据库的优势 应用场景有哪些 未来展望 番外篇 腾讯云向量数据库的设计核心 结语 前言 还是那句话 不用多说想必大家都能猜到 现在技术圈最火的是什么 非人工
  • 基于腾讯云手把手教你搭建网站

    目录 前言 前期准备工作 具体搭建网站 番外篇 网站开发及优化 结束语 前言 在当今数字化时代浪潮之下 作为开发者拥有一个属于自己的网站是非常有必要的 也是展示个人形象 打造影响力和给别人提供服务的重要途径 网站不仅可以作为打造自己影响力的
  • 腾讯云HAI:人人都可无门槛AI作画!

    目录 前言 关于HAI HAI优势 开启HAI使用 清理资源 体验心得 结束语 参考文献 前言 随着科技的不断进步和数据驱动的时代到来 越来越多的开发者和数据研究人员需要强大的计算能力来支持他们的工作 尤其是在处理大规模数据 进行机器学习和
  • 阿里云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 分布式数据传输协议
  • 腾讯云存储上传头像、文件功能(超详细保姆级)

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