上传文件很费时费力?那是你没用对方式
创始人
2024-02-10 05:06:07
0

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、前端直传的优点
  • 二、实现步骤
    • 2.1、后端方面
      • 2.1.1 添加依赖
      • 2.1.2 增加接口
      • 2.1.3 测试接口
    • 2.2、前端方面
      • 2.2.1 安装 cos-js-sdk-v5 依赖
      • 2.2.2 新建组件
      • 2.2.3 使用组件
  • 总结


前言

嗨,大家好,我是希留,一个被迫致力于全栈开发的老菜鸟。

上一篇文章说到上传文件使用云服务商的对象存储,感兴趣的可以阅读该文章:传送门

发布后有不少伙伴反馈,前后端分离的项目更好的上传方式是使用前端直传的方式。于是我查阅相关文档,连夜把项目里的上传方式改成前端直传了(项目的技术栈是Springboot + Vue),发现上传速度明显提升了。所以这篇文章就来说说,前端直传的方式应该怎么弄呢?


一、前端直传的优点

前端数据直传的方式相比较后端上传的方式有不少的优点。

  • 上传速度快。后端上传的方式是用户数据需先上传到应用服务器,之后再上传到COS。而前端直传的方式,用户数据不用通过应用服务器中转,直传到COS。减少了网络请求响应,速度将大大提升。而且COS采用BGP带宽,能保证各地各运营商之间的传输速度。
  • 扩展性好。后端上传的方式会占用带宽,文件上传一多就会占用服务器大量的带宽,导致其它请求阻塞,甚至无法访问等情况。前端直传的方式节约了后端服务器的带宽和负载。
  • 成本低。服务器真正的成本基本上都在带宽上,提升带宽的费用是很贵的。而使用前端直传的方式可以减少文件上传到服务器的带宽,从而降低带宽成本。

二、实现步骤

2.1、后端方面

后端需要提供一个生成临时密钥的接口,具体步骤如下,可参考文档,由于我的后端服务是Java语言,所以这里举例使用的是 Java SDK。

2.1.1 添加依赖


com.qcloudcos-sts_api3.1.1

2.1.2 增加接口

代码如下(示例):

package com.xiliu.common.controller;import com.tencent.cloud.CosStsClient;
import com.tencent.cloud.Response;
import com.xiliu.common.result.R;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.TreeMap;/*** @author xiliu* @description cos存储前端控制器* @date 2022/11/13 17:51*/
@RestController
@RequestMapping("/cos")
public class CosController {@Value("${cos.secretId}")private String secretId;@Value("${cos.secretKey}")private String secretKey;@Value("${cos.regionName}")private String regionName;@Value("${cos.bucketName}")private String bucketName;@ApiOperation(value = "获取cos临时密钥")@GetMapping("/temp-key")public R getTempKey() {TreeMap config = new TreeMap();try {// 替换为您的云 api 密钥 SecretIdconfig.put("secretId", secretId);// 替换为您的云 api 密钥 SecretKeyconfig.put("secretKey", secretKey);// 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒config.put("durationSeconds", 1800);// 换成您的 bucketconfig.put("bucket", bucketName);// 换成 bucket 所在地区config.put("region", regionName);// 只允许用户访问 upload/house 目录下的资源config.put("allowPrefixes", new String[] {"upload/house/*"});// 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。String[] allowActions = new String[] {// 简单上传"name/cos:PutObject",// 表单上传、小程序上传"name/cos:PostObject",// 分块上传"name/cos:InitiateMultipartUpload","name/cos:ListMultipartUploads","name/cos:ListParts","name/cos:UploadPart","name/cos:CompleteMultipartUpload"};config.put("allowActions", allowActions);Response response = CosStsClient.getCredential(config);return R.ok(response);} catch (Exception e) {e.printStackTrace();throw new IllegalArgumentException("no valid secret !");}}
}

2.1.3 测试接口

由于是测试,接口的安全校验我就去掉了,方便测试是否能正常生成临时密钥。结果如下图所示,正常生成了。在这里插入图片描述

2.2、前端方面

前端方面,可以参考文档,我使用的前端框架是Vue,具体步骤如下,上传功能可以封装成一个组件,提供给有需要的地方调用。

2.2.1 安装 cos-js-sdk-v5 依赖

npm install --save cos-js-sdk-v5

2.2.2 新建组件

在 components 目录下新建一个 upload 目录,在 upload 目录下新建 multiUpload.vue 组件。

代码示例如下:




2.2.3 使用组件

代码示例如下:



效果如下图所示:
在这里插入图片描述

总结

以上就是本文的全部内容了,感谢大家的阅读。

如果觉得文章对你有帮助,还不忘帮忙点赞、收藏、关注、评论哟,您的支持就是我创作最大的动力!


相关内容

热门资讯

第一学期中班幼儿评语 第一学期中班幼儿评语(精选15篇)  在平平淡淡的日常中,大家都写过评语吧,评语的内容包括被考评者的...
王小波的经典语录100句   王小波的小说既继承了年代对爱情与革命权力关系的思考,具有强烈启蒙意味,也顺应了年代世俗化潮流。接...
经典祝愿高考成功寄语 经典祝愿高考成功寄语(通用90句)  六月参加高考,准备还得趁早,心态一定摆正,付出必有回报,毕竟熬...
电影的观后感 电影的观后感  在观看完一部作品以后,能够给我们不少启示,这时候最关键的观后感不能忘了。但是观后感有...
利益关系经典语录 利益关系经典语录  在日常的学习、工作、生活中,大家都知道一些经典的语录吧,语录是指一个人的说话记录...
哆啦a梦语录 哆啦a梦语录  01、骗人有风险,说谎要谨慎。  02、日子就像偷跑的小孩,无声地溜走。  03、知...
感人的情书经典语录   在很多超感人的情书中,是有一些情书经典语录起到关键作用。小编今天收集了超感人情书经典语录,希望得...
高中生毕业寄语 高中生毕业寄语4篇  在日常的学习、工作、生活中,大家总免不了要接触或使用寄语吧,寄语是所传的、寄托...
优秀班干部获奖感言 优秀班干部获奖感言优秀班干部获奖感言尊敬的老师,亲爱的同学: 大家晚上好!我是S,今天很高兴作为获奖...
最新感人经典语录 最新感人经典语录  1其实,我不是一定要等你,只是等上了,就等不了别人了。《朝露若颜》  2如果世界...
小说我的美女大小姐经典语录   揭穿谎言背后的谎言多累啊!还不如站的离你远点儿,看着你怎么在谎言中尽情的表演  ——李兴禹《我的...
个性早安寄语 常用个性早安寄语汇总75句  我只是想写一封信给你,寄信人在河这头,收信人在河那头。隔开我们的这条河...
假期家长评语怎么写 假期家长评语怎么写  假期我们家长任务是比较大的,许多家长都不知道怎么去写这个假期表现评语,假期家长...
一年级开学典礼校长致辞 一年级开学典礼校长致辞(精选5篇)  在平平淡淡的学习、工作、生活中,大家都对致辞很是熟悉吧,致辞是...
初中学生综合素质评语 初中学生综合素质评语大全  在生活、工作和学习中,大家总少不了要接触或使用评语吧,评语可有效引导被评...
毕业班主任寄语 毕业班主任寄语通用15篇  在平日的学习、工作和生活里,大家总少不了要接触或使用寄语吧,寄语的种类很...
谈“死亡”话题 谈“死亡”话题  死亡指丧失生命,生命终止,停止生存,是生存的反面。哲学上说,死亡是生命(或者事物件...
情人节温馨寄语 情人节温馨寄语集合15篇  在学习、工作、生活中,说到寄语,大家肯定都不陌生吧,寄语是所传的话语,有...
初中毕业寄语 初中毕业寄语(合集15篇)  在学习、工作或生活中,大家都尝试过写寄语吧,寄语是人们所传的话语,有时...
生日的寄语 生日的寄语(精选15篇)  在我们平凡的日常里,要用到寄语的情况还是蛮多的,借助寄语人们可以表达心中...