首页 > 作文

SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码

更新时间:2023-04-04 04:18:21 阅读: 评论:0

目录
1、开通腾讯云对象存储服务2、创建存储桶3、密钥管理,新建密钥4、yml配置密钥、cos信息5、cosconfig配置类6、cos文件上传工具类7、controller测试上传接口:8、postman接口调用9、浏览器预览效果

企业级项目开发中都会有文件、图片、视频等文件上传并能够访问的场景,对于初学者demo可能会直接存储在应用服务器上;对于传统项目可能会单独搭建fastdfs、minio等文件服务来实现存储,这种方案可能对于企业成本较小,但缺点也是很多,例如:1、增加技术人员的运维和维尺寸的英文护成本,2、规模越来越大时需要硬件的支持,且存在文件丢失风险,3、服务器没有cdn,用户访问网站图片加载慢用户体验不好。

所以,一般上规模的项目、或者追求用户体验的项目可能会考虑使用第三方的云服务来存储,市场主流厂商有:七牛云、阿里云oss、腾讯云cos等,具体采用哪种存储方案需结合项目、规模、成本等因素,综合考量确定。

因为用的腾讯云服务器,为了方便统一管理,所以直接用了腾讯云的cos对象存储服务,下面是基于springboot和腾讯云cos提供的java sdk快速对接实现文件上传功能。

1、开通腾讯云对象存储服务

/d/file/titlepic/login style="text-align: center">

3、密钥管理,新建密钥

4、yml配置密钥、cos信息

cos:  baurl: fxxxxxa-1xxxxx1.cos.ap-shanghai.myqcloud.com  accesskey: akxxxxxxxxxxxxxxxxxxxxxxxxxcf  cretkey: okxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxni  regionname: ap-shanghai  bucketname: fxxxxxa-1xxxxx1  folderprefix: /files

5、cosconfig配置类

@data@component@configurationproperties(prefix = "cos")public class cosconfig {    private string baurl;    private str少儿围棋入门教程ing accesskey;    private string cretkey;    private string regionname;    private string bucketname;    private string folderprefix;}

6、cos文件上传工具类

/** * 腾讯云cos文件上传工具类 */@slf4jpublic class cosclientutil {     /**     * 获取配置信息     */    private static cosconfig cosconfig = s潜水面pringbeanutils.getbean(cosconfig.class);     /**     * 初始化用户身份信息     */    private static coscredentials cred = new bas梦见假钱iccoscredentials(cosconfig.getaccesskey(), cosconfig.getcretkey());     /**     * 设置bucket的区域     */    private static clientconfig clientconfig = new clientconfig(new region(cosconfig.getregionname()));     /**     * 生成cos客户端     */    private static cosclient cosclient = new cosclient(cred, clientconfig);     /**     * 上传文件     *     * @param file     * @return     * @throws exception     */    public static string upload(multipartfile file) throws exception {        string date = dateutils.formatedate(new date(), "yyyy-mm-dd");        string originalfilename = file.getoriginalfilename();        long nextid = idgenerator.getflowidworkerinstance().nextid();        string name = nextid + originalfilename.substring(originalfilename.lastindexof("."));        string foldername = cosconfig.getfolderprefix() + "/" + date + "/";        string key = foldername + name;        file localfile = null;        try {            localfile = transfertofile(file);            string filepath = uploadfiletocos(localfile, key);            log.info("upload cos successful: {}", filepath);            return filepath;        } catch (exception e) {            throw new exception("文件上传失败");        } finally {            localfile.delete();        }    }     /**     * 上传文件到cos     *     * @param localfile     * @param key     * @return     */    private static string uploadfiletocos(file localfile, string key) throws interruptedexception {        putobjectrequest putobjectrequest = new putobjectrequest(cosconfig.getbucketname(), key, localfile);        executorrvice threadpool = executors.newfixedthreadpool(8);        // 传入一个threadpool, 若不传入线程池, 默认transfermanager中会生成一个单线程的线程池        transfermanager transfermanager = new transfermanager(cosclient, threadpool);        // 返回一个异步结果upload, 可同步的调用waitf数学大全oruploadresult等待upload结束, 成功返回uploadresult, 失败抛出异常        upload upload = transfermanager.upload(putobjectrequest);        uploadresult uploadresult = upload.waitforuploadresult();        transfermanager.shutdownnow();        cosclient.shutdown();        string filepath = cosconfig.getbaurl() + uploadresult.getkey();        return filepath;    }     /**     * 用缓冲区来实现这个转换, 即创建临时文件     * 使用 multipartfile.transferto()     *     * @param multipartfile     * @return     */    private static file transfertofile(multipartfile multipartfile) throws ioexception {        string originalfilename = multipartfile.getoriginalfilename();        string prefix = originalfilename.split("\\.")[0];        string suffix = originalfilename.substring(originalfilename.lastindexof("."));        file file = file.createtempfile(prefix, suffix);        multipartfile.transferto(file);        return file;    } }

7、controller测试上传接口:

    /**     * 腾讯云cos上传     *     * @param file     * @return     * @throws exception     */    @postmapping(value = "/cosupload")    public responentity cosupload(multipartfile file) throws exception {        string filepath = cosclientutil.upload(file);        uploaddto dto = uploaddto.builder().filepath(filepath).build();        return resultvoutil.success(dto);    }

8、postman接口调用

9、浏览器预览效果

到此这篇关于springboot整合腾讯云cos对象存储实现文件上传的示例代码的文章就介绍到这了,更多相关springboot腾讯云cos文件上传内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 04:18:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/a197e2f76db0dc68a2d307426cfb0502.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码.doc

本文 PDF 下载地址:SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码.pdf

标签:腾讯   密钥   文件上传   可能会
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图