企业级项目开发中都会有文件、图片、视频等文件上传并能够访问的场景,对于初学者demo可能会直接存储在应用服务器上;对于传统项目可能会单独搭建fastdfs、minio等文件服务来实现存储,这种方案可能对于企业成本较小,但缺点也是很多,例如:1、增加技术人员的运维和维尺寸的英文护成本,2、规模越来越大时需要硬件的支持,且存在文件丢失风险,3、服务器没有cdn,用户访问网站图片加载慢用户体验不好。
所以,一般上规模的项目、或者追求用户体验的项目可能会考虑使用第三方的云服务来存储,市场主流厂商有:七牛云、阿里云oss、腾讯云cos等,具体采用哪种存储方案需结合项目、规模、成本等因素,综合考量确定。
因为用的腾讯云服务器,为了方便统一管理,所以直接用了腾讯云的cos对象存储服务,下面是基于springboot和腾讯云cos提供的java sdk快速对接实现文件上传功能。
/d/file/titlepic/login style="text-align: center">
cos: baurl: fxxxxxa-1xxxxx1.cos.ap-shanghai.myqcloud.com accesskey: akxxxxxxxxxxxxxxxxxxxxxxxxxcf cretkey: okxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxni regionname: ap-shanghai bucketname: fxxxxxa-1xxxxx1 folderprefix: /files
@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;}
/** * 腾讯云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; } }
/** * 腾讯云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); }
到此这篇关于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 条评论) |