uniapp 官方合作的云存储是阿里云和腾讯云,但我们公司选的云存储服务恰好都不是这两家,是华为云 OBS。网上搜了多次,没有能成功的案例分享。但是,考虑到网上关于华为云性能优异的测评报告,以及我对华为这家公司的好感,我还是想努力把这条路走通。因此,走上了坚苦的踩坑之路。

但大家不必重复这个踩坑经历了,我直接上拿走即用的代码。

技术路线确定:
1.前端产生签名前端直传华为云OBS:好处是不经过自家服务器周转,减少一个环节,上传速度更快。坏处:前端产生签名的过程中,会将 AK,SK 等核心账号信息暴露,是极其危险的。
2. 后端签名前端获取后直传华为云OBS:好处同上,而且由于是后端生成签名,前端获取有时效性的签名后直传云端,因此没有泄露核心账号信息的风险。

我选择第二条路线。以下是上传视频文件的步骤(图片上传相似,多文件在上传前增加一个循环而已。下面不只是前端代码,也包括必要的后端代码):

1.后端生成上传文件到OBS 的签名(PHP)的代码:
在做这一步之前,让后台技术同事先在服务器目录下安装 OBS的 PHP SKD,这一步有详细文档,此处忽略。

     $object = $this->input->post('file_name')?:''; //文件名$file_type = $this->input->post('file_type')?: ''; //文件类型$obsClient = new ObsClient ( [ 'key' => '***',           //OBS 中的 AK'secret' => '***',      //OBS 中的 SK'endpoint' => 'https://obs.cn-north-4.myhuaweicloud.com', //注意实际的终点可能不同'signature' => 'obs',] );// URL有效期,3600秒$expires = 3600;// 上传对象$resp = $obsClient->createPostSignature( [ 'Bucket' => '***',  //你自己的桶名(bucket)'Key' => $object,'Expires' => $expires,'FormParams' => ['x-obs-acl' => 'public-read','content-type' => $file_type,]] );// printf($resp);$data['Accesskeyid'] = '***';  //OBS 中的AK$data['Policy'] = $resp['Policy'];$data['Signature'] = $resp['Signature'];echo json_encode($data);} ```2. 前端选择视频文件,生成必要信息:
```select_video(){var _this = this;uni.chooseVideo({maxDuration: 60,  //拍摄视频最长拍摄时间,单位秒count:1, //上传视频的数量sourceType:['camera','album'],success: (res) => {console.log(res)_this.video_src = res.tempFilePath;let index1 = res.tempFilePath.lastIndexOf('/');  let index2 = res.tempFilePath.lastIndexOf('.');_this.file_name = res.tempFilePath.substring(index1+1,res.tempFilePath.length);   //获取文件名_this.file_type = res.tempFilePath.substring(index2+1, res.tempFilePath.length); // 获取文件后缀名,即文件类型_this.key = 'video/' + _this.file_name;console.log(_this.file_name)_this.is_video = 1;},})}, ```3. 前端获取上传文件的签名并直传 OBS(一步完成):
可以写在当前页面,也可以封装成公共方法,建议封装。```function get_obs_signature(file_path, file_name, file_type){console.log(file_name)return new Promise((resolve, reject)=>{uni.request({url: '***',    //PHP获取签名的接口路径method: 'POST',header:{'Content-Type': 'application/x-www-form-urlencoded'},data: {file_name: file_name,file_type: file_type},success: (res) => {console.log(res.data)resolve(res.data)}})}).then(res=>{let policy = res.Policy;let signature = res.Signature;let ak = res.Accesskeyid;console.log(policy)uni.uploadFile({url: 'https://***.obs.cn-north-4.myhuaweicloud.com',  //用你自己的 bucket 名替换星号filePath: file_path,name: 'file',formData: {'key': file_name,'AccessKeyId': ak,'Policy': policy,'x-obs-acl': 'public-read','content-type': file_type,'Signature': signature},success:(res)=>{console.log(res);}})}) ```4. 获取上传后的文件路径:
OBS 默认不返回上传成功的路径,那该怎么办?其实很简单,存储在 OBS 的文件都有规律,通过以下方法可以拼接:
obs_url = 'https://***.obs.cn-north-4.myhuaweicloud.com/' + _this.key;  //用你自己的 bucket 名替换星号5. 视频直传测试(华为云,阿里云,unicloud 大PK):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210202191236848.png)

PHP后端生成签名后uniapp前端直传华为云OBS记录相关推荐

  1. 前端直传华为云OBS

    本文是用前端将图片直传华为云OBS,可供参考.(比较好的方式是建议使用后台生成签名认证方式上传) 1.在华为云开通OBS对象存储 2.下载js sdk引入项目中 3. 首先创建实例 // 创建ObsC ...

  2. uniapp vue 微信小程序 前端 直传华为云对象存储OBS

    前言: 因项目服务器性能需要 需要前端直传华为云对象存储 绕过后端 个人在华为云官网SDK文档研究 分享出来 避免大家踩坑 报错定位 web端 报 Error: Network Error   高频问 ...

  3. uniapp 上传图片到华为云obs

    记录一下用uniapp上传图片到华为云obs,之前是先把文件传到我们自己的服务器,然后后端的同事再上传到obs,但是我们公司的带宽太低了,传的太太太太慢了,于是考虑直接让用户上传到obs,不经过我们自 ...

  4. 前端js华为云obs上传下载文件与进度条的设置

    前端js华为云obs上传下载文件与进度条的设置 首先下载OBS BrowserJS SDK安装包 用git将代码拉到本地 git clone https://github.com/huaweiclou ...

  5. 前端js华为云obs断点续传上传

    前端js华为云obs断点续传上传 断点续传上传就是将待上传的文件分成若干份分别上传,并实时地将每段上传结果统一记录在断点续传记录对象中,仅当所有分段都上传成功时返回上传成功的结果,否则在回调函数中返回 ...

  6. 后疫情时代,华为云会议如何定义未来会议?

    摘要:有着超过20年视频会议产品研发经验的华为云会议来说,华为做的视频会议系统有点不一样. 疫情过后,火了什么?视频会议系统! 不可否认,疫情让很多人知道了视频会议,并在相当长的一段时间成为了我们工作 ...

  7. java后端生成图形验证码、前端接收并展示

    工具类 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2 ...

  8. 记录uniapp使用华为云obs上传图片视频

    1:去华为云官网下载  OBS BrowserJS SDK  华为云 2:项目中引入sdk文件 import ObsClient from '../../utils/esdk-obs-browserj ...

  9. 华为云 内容审核API调用 前端 js uni-app

    文章目录 前言 一.华为云的内容审核api的调用需要哪些东西? 二.使用步骤 1.先注册一个华为云的账号 2.申请内容审核服务 3.[华为云内容审核API的官方文档](https://support. ...

最新文章

  1. 从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一)
  2. VXLAN和GRE的区别
  3. Python A+B问题
  4. 有关identity的小技巧
  5. OpenCV与gcc和CMake一起使用
  6. python 桌面提醒_使用Python获取桌面通知
  7. 如何把密度函数化为标准正态二维分布_概率微课:第三章(22) 二维随机变量及分布函数定义...
  8. 创意吃鱼法(洛谷-P1736)
  9. web漏洞扫描工具_如何使用Arachni扫描web漏洞
  10. 华为修改优先级命令_华为配置命令大全
  11. 真正的PHP多线程(绝非fork或者用http再开进程)
  12. Android 8.0 安装Google服务
  13. Java对象和Map相互转换方法
  14. python爬取豆瓣电影并分析_Python爬虫入门 | 2 爬取豆瓣电影信息
  15. 0506-铁矿石跌5%,美股大跌
  16. 恒生UFX 统一接入介绍
  17. 2022-2027年中国化纤行业市场调研及未来发展趋势预测报告
  18. QImage/cv::Mat/HObject的图像格式互相转换,4字节对齐
  19. jsp+spring+hibernate
  20. ESP32 使用 ESP-AT 测试 MQTT WSS 连接和数据传输的流程

热门文章

  1. error怎么开机 fan_台式机开机出现cpu fan error怎么办
  2. 乐创杯c语言大赛形式,【连载】(学了这么多年C语言,你真的了解static关键词吗)乐创DIY C语言讲义​——4.4节...
  3. 在学校使用计算机的作文,电脑学校作文
  4. Flutter Sliver大家族之SliverList(),SliverFixedExtentList(),SliverGrid()组件②
  5. 场景建造软件_有效地构建。 建造者关于有目的地交付软件的观点
  6. 中秋节静态HTML网页作业作品 大学生中秋网页设计制作成品 简单DIV CSS布局网站
  7. 鬼谷子:大胸怀、大格局、成大事者,一定要看懂这三句话
  8. 【汇正财经】股票指数定义是什么?我国的股票指数有哪些?
  9. 响应式编程(反应式编程)的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)
  10. 10分钟了解BIM+GIS融合,常见BIM数据格式及特性