1、 项目背景

由于本人项目需要,需要在视频点播服务之中需要加载字幕文件(通用格式srt),经过比较好几家的公有云服务,最后选择只有百度云提供字幕服务。

字幕:我们通常在观看外语电影的是,没有国语版时候只能通过下载字幕,了解其中表达的意义。

百度云提供多种授权方式,但是为了保障数据能够安全授权,最后使用STS(Security Token Service)临时授权的方式来实现视频文件的上传,具体操作如下图所示流程:

2、百度云提供示例及大坑:

百度云提供的示例都在github上,应该是百度上海一个员工在维护,具体地址如下:

其中一个大坑:

这些提供的示例:都是为可考虑您在本地能够运行,都模拟了一个简单的HttpServer服务然后按照相关的示例运行步骤都可以正常运行和上传资源到您自己的百度云服务器之中。具体可参考如下所示的操作:

bce-sdk-js samples

初始化

运行 sample 代码之前,首先需要修改一下 config.json,添加ak, sk, bucket 的配置:

项目

默认值

port

8800

enable_sts

true

ak

sk

bucket

endpoint

https://bj.bcebos.com

安装依赖

npm install

根据配置文件 config.json,自动生成一些代码

npm run prepare

启动 server

类别

命令

frontend

node frontend/main.js

Node.js backend

cd backend/nodejs; node main.js

php backend

cd backend/php; php main.php

java backend

cd backend/java; mvn clean install exec:java -Dexec.mainClass=com.baidu.inf.bce.App

关于 crossdomain.xml

IE下面跨域请求是通用 moxie.swf 发起的,因此涉及到一些 crossdomain.xml 文件的配置。

但是这些所有的操作都依赖于和运行在HttpServer之中的,这种方式是无法满足,把这个上传功能模块集成到项目的工程之中的,因为您的项目之中无法接受你运行一个独立的HttpServer服务的。

3、真实项目使用方式(集成到项目之中提供API获得STS授权)

于是只能另外寻找其他方式,希望通过写一个普通的接口,然后前端能够直接调用后台的接口API。

实现STS授权文件上传的具体业务流程

3.1、后端提供一个生成STS授权服务的接口(重点注意事项:后端提供的STS获得接口必须支持JSONP的否则前端无法实现文件上传),

3.2、前端直接访问接口获得相关的STS授权信息,由于授权可以设置权限的时效性,于是乎需要考虑sessionToken过期的情况,需要前端上传文件之前判断获得STS是否在有效期内。

在下想过很多之种方法,最后甚至询问了兄弟单位,他们使用的PHP方式来实现的文件上传,然后获得临时授权,甚至请求他们给了部分实现如何获得STS授权的源码如下图所示:

百度后端PHP生成STS

3、百度云点播VOD服务,使用STS方式上传文件基本使用ES6前端编码实现上传

return api.getToken().then((data) => {

this._tokenTime = +new Date() + expireMs;

return this.client = new baidubce.bos.Uploader({

bos_bucket: data.bucket || this.bucket,

bos_endpoint: this.endPoint,

bos_ak: data.accessKeyId,

bos_sk: data.secretAccessKey,

uptoken: data.sessionToken,

bos_task_parallel: 1,

init: init

});

});

在添加文件之前判断_tokenTime < 当时时间

this.client.setOptions({   bos_ak: data.accessKeyId,

bos_sk: data.secretAccessKey,

uptoken: data.sessionToken

}); 更新token

返回结果 如果前端需要处理 建议过期时间格式为 2018-01-26 22:45:00

{"bucket":"***",//返回你自己的bucket"accessKeyId":"6dc9c09800b111e8bec5dd8bafa1b8e0","secretAccessKey":"0042398f67ce4508b4f3cef87c634f7e","securityToken":"MjUzZjQzNTY4OTE0NDRkNjg3N2E4YzJhZTc4YmU5ZDh8AAAAAFoBAADkQOwuM8FBxyU6ZaFwkS9bF7VgK9LM+9JS1HdiZAEGOmDjFD9d8IrR5mktyfagQVw2I5M3Fy0icAUK8kwgzVRpNWMmlImJL9T1RHWTDzqvBvgbXAfQXOUwF/SEP0QgN3aihA6+0MgHLkFjR1kXKe4EeNsQAO9Ut00mL8h/MCoWo0BdhcGOGVYbje7f+vl09pXWycYVcYqjmjPLqmuoEQ0GuHPr1/j6WpTjvdJsiSx4Qe0/y21S5LxHdk+dqXofnoUiTWPi8mh7/bCHmgDoA0NT8TBquKuWGQdETayCEklYIQ==","expiresAt":"Wed Jan 24 22:51:08 CST 2018"}

虽然有了兄弟单位提供基本示例,但是没有参透其中的玄机;还是不明白如何能够不通过运行HttpServer,通过接口方式直接获得STS相关的授权信息。最后仔细阅读了示例之中uploader之中的必选参数,如下图所示

然后参照提供示例的后端Java实现代码,把后端改造为如下方式

特别注意 其中里面后端代码支持JSONP模式的关键点参数 callback

如果理解透彻这一点,您在你的项目之中能够实现基本的API就可以获得百度云提供STS授权认证模式。然后在分析兄弟单位提供的PHP其实也是实现JSONP的方式。然后本人也特意在网上收集如何在服务端支持JSONP如下文件链接

java百度云文件上传_关于如何在自己项目集成百度云BCE文件上传STS方案相关推荐

  1. 华为云welink考试试题_华为内部开启WeLink项目,华为云是这样考虑的-通信/网络-与非网...

    协同办公市场竞争激烈 华为云 WeLink 是华为旗下智能工作平台,它融合消息,邮件,会议.音视频.云空间.小程序等服务,可助力用户随时.随地.通过各类终端设备等实现协作办公.华为还宣布携手合作伙伴成 ...

  2. mysql上传到阿里云服务器地址_从0部署Web项目到阿里云服务器上

    前言 本篇文章的主要内容正如标题所言,这个过程说简单也还是有很多细节需要注意的,说难其实也挺简单的,还是希望我们大家都能勤动手去体会其中的内容,经历本身就可以使人进步.话不多说,让我们开始吧. 正文 ...

  3. 云视通手机下载的文件存储位置_小白版丨IPFS网络怎么存储、下载文件?怎么托管网站?...

    IPFS是一种用于文件存储的对等网络协议,采用的是基于内容的寻址,而非基于位置.这意味着要查找文件,我们不需要知道它在哪里(abc.com/cat.png),而是它包含的内容(QmSNssW5a9S3 ...

  4. python文本格式上一日_一日一技:在 Python 中快速遍历文件

    一日一技:在 Python 中快速遍历文件 摄影:产品经理 厨师:产品经理 当我们要在一个文件夹及其子文件夹里面寻找特定类型的文件,我们可能会这样写代码: 没有子文件夹时 import os all_ ...

  5. idea tomcat项目部署失败_阿里云centons安装Jdk和tomcat,mysql以及项目部署(阿里云入门)...

    买了个阿里云ECS服务器,自己摸索安装,适合小白看看,教程该做的都有列出来. 1.购买服务器 2.查看阿里云管理 点击实例进入 修改密码可以点击管理--出现的页面点击更多---重置实例密码 3.下载x ...

  6. itmz文件如何打开_如何使用proteus8打开低版本proteus7的仿真文件?

    我们在使用proteus进行仿真的时候会遇到版本的问题,proteus8打开低版本proteus7的仿真文件就是其中之一,本文就为大家介绍如何使用proteus8打开低版本proteus7的仿真文件. ...

  7. 后端根据百度地图真实路径距离_远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术...

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

  8. img 光盘映像文件已损坏_系统封装||还在用MSDN下载Windows镜像文件?你out了,用这个就可以了...

    大家好,我是FreeRonin,今天要分享的是一Windows系统镜像文件下载工具,镜像文件格式是一个基于文件的磁盘镜像格式.所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作 ...

  9. delphi 选择文件夹目录_系统小技巧:不装软件 批处理为文件夹加锁

    每个人电脑上都有一些小秘密不想让人知道,常规的方法是使用第三方加密软件进行保护.不过加密软件会占用系统资源,而且密码的记忆也让人很头疼.对于Windows 10用户,保护秘密文件可以借助系统自带的批处 ...

最新文章

  1. 让vim正确显示cfg文件中的xxx = yyy=zzz
  2. 分组交换网络的工作原理:分组交换网络的组成
  3. matlab练习程序(最小二乘多项式拟合)
  4. ShowAllPic--图片
  5. Arthas 用户文档
  6. CodeForces - 1486C2 Guessing the Greatest (hard version)(二分+交互)
  7. Dll 导出类 [示例代码]
  8. 用SAP ALV Integrated Data Access展示CDS view数据的一些调试截图
  9. 清北学堂----北京集训
  10. python廖雪峰教程 学习笔记
  11. 域做文件服务器,linux 做域文件服务器
  12. 服务器系统更新要多久,请问系统服务器多长时间更新一次
  13. 在bash中,如何检查字符串是否以某个值开头?
  14. idea开发工具的一些实用技巧
  15. C++走向远洋——52(十三周阅读程序)
  16. Android 存储学习之SQLite数据库的基本操作
  17. pip更新pip,升级 pip3怎么做?
  18. 简易的微信公众号管理平台使用指南
  19. c语言中字符后u代表什么意思,C语言中的0U或1U是什么意思?
  20. 一文玩转NGINX(对于NGINX,你真的了解吗?)

热门文章

  1. sql 如何根据月份查询数据总数_什么是慢查询?如何通过慢查询日志优化?
  2. 龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...
  3. 教你如何成为解决问题的高手
  4. 教你玩转CSS 伪元素
  5. qt linux opensource ,QT opensource embedded linux 编…
  6. 学水利的想转行计算机,为什么说千万别学水利水电工程?附水利八大院排名2020年(最新)...
  7. java静态方法获取对象_JavaPowerMockito模拟单个静态方法和返回对象
  8. 移动端UC /QQ 浏览器的部分私有Meta 属性
  9. vue中使用Ueditor编辑器 -- 1
  10. node中的缓存机制