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

1、 项目背景

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

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

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

260696?pageNo=1

e8ee634a8a57ab443a2c4cb038c21ac3.png

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

260696?pageNo=1

758c43f6d1628c7e8777d38d33c5a3a8.png

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之中的必选参数,如下图所示

5a851020-c8bd-4da5-9787-4f492569d179.gif

42366ba23293f087a1fcd10368bba14f.png

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

186faa7a-b843-49a2-b2be-7265158d72ad.gif

4d8636ef81f083813562eec047548557.png

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

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

1313c6e2-b224-41ef-a721-cfcc7669d6ca.gif

140b138758e34920187fed7ae1e2ef09.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 7 – NIO文件革命

Java 7&#xff08;“项目代币”&#xff09;已于去年7月问世。 此版本中的新增功能很有用&#xff0c;例如&#xff0c;尝试使用资源–从try块自动处理可关闭的资源&#xff0c;switch语句中的字符串&#xff0c;用于异常的multicatch以及用于使用泛型的<>运算符。 每个…

hdu 3507 Print Article(斜率优化DP)

题目链接&#xff1a;hdu 3507 Print Article 题意&#xff1a; 每个字有一个值&#xff0c;现在让你分成k段打印&#xff0c;每段打印需要消耗的值用那个公式计算&#xff0c;现在让你求最小值 题解&#xff1a; 设dp[i]表示前i个字符需要消耗的最小值&#xff0c;那么有dp[i]…

第三章 consul服务注册与服务查询

1、定义一个服务 https://www.consul.io/docs/agent/services.html 该方法是服务注册中提供服务的最常用的方法。 关于服务的定义&#xff1a;服务的属性我们会在后边每出现一个总结一个&#xff0c;最后再做总结。 2、服务注册 2.1、创建服务文件所存放的文件夹 说明&#xff…

coreos 安装mysql_CoreOS 在 PC 上快速安装方法指南

意义能够以最快的速度安装部署Linux操作系统。安装快速简单&#xff0c;几乎不花时间就可以开始运行Docker。运行速度非常快。使用内存硬盘。我的情况win8 笔记本偶尔玩游戏&#xff0c;但是装Linux双系统可能需要我一天的时间来完成。我的所有业务都只需要在Docker中跑就可以了…

使用ycsb测试cassandra

参考 https://github.com/cloudius-systems/osv/wiki/Benchmarking-Cassandra-and-other-NoSQL-databases-with-YCSB https://github.com/brianfrankcooper/YCSB/tree/master/cassandra 创建 表头 https://gist.github.com/pbailis/3978273  设置field参数 长度和个数 启动和…

Session 的配置和特性

session的配置 对于session的配置是php.ini中配置 session数据都是保存在文本文件中 设置session文件的保存位置 说明&#xff1a; 默认是保存在windows/temp目录 设置session保存作为客户端标识的数据使用cookie 设置session保存客户端标识的数据&#xff0c;只使用cookie 说明…

OAuth与Spring Security

摘自Wikipedia&#xff1a; OAuth &#xff08; 开放式身份验证 &#xff09;是一种开放式身份验证标准。 它允许用户与其他站点共享存储在一个站点上的私有资源&#xff08;例如照片&#xff0c;视频&#xff0c;联系人列表&#xff09;&#xff0c;而不必发出其凭据&#xff…

flex java 开发环境搭建_Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)

FlexJAVABlazeDS开发环境配置(Java工程和Flex工程独立)2019年12月07日阅读数&#xff1a;7这篇文章主要向大家介绍FlexJAVABlazeDS开发环境配置(Java工程和Flex工程独立),主要内容包括基础应用、实用技巧、原理机制等方面&#xff0c;希望对大家有所帮助。[url]http://blog.csd…

1251 括号(递归小练)

1251 括号 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题目描述 Description计算乘法时&#xff0c;我们可以添加括号&#xff0c;来改变相乘的顺序&#xff0c;比如计算              X1, X2, X3, X4, …, XN的积&#xff0c;可以 (X1(X2(X3(X4(...(XN-1…

zabbix_agentd.conf配置文件详解

Aliaskey的别名&#xff0c;例如 Aliasttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]),,,,\1]&#xff0c; 或者ttlsa的用户ID。你可以使用key&#xff1a;vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]),,,,\1]&#xff0c;也可以使用ttlsa.userid。备注: 别名不…

在运行时修补Java

本文将重点介绍如何解决与第三方库相关的问题 不能被规避 难以排除/绕过/替换 只需不提供错误修正 在这种情况下&#xff0c;解决问题仍然是一项艰巨的任务。 作为这种情况的诱因&#xff0c;请考虑对“哈希索引”数据结构的攻击&#xff0c;例如java.util.Hashtable和java…

php return直接输出,PHP中return用法详细解读

原标题&#xff1a;PHP中return用法详细解读在大部分编程语言中&#xff0c;return关键字可以将函数的执行结果返回&#xff0c;PHP中return的用法也大同小异&#xff0c;对初学者来说&#xff0c;掌握PHP中return的用法也是学习PHP的一个开始。首先&#xff0c;它的意思就是返…

并行执行,没用到过,写到这里免得搞忘

/// <summary>/// /// </summary>class Program{static void Main(string[] args){simultaneous();Console.ReadKey();}static void simultaneous(){//尽可能并行执行提供的每个操作Parallel.Invoke(() > ComplexMethod("1"),() > ComplexMethod(&…

UIViewController生命周期

UIViewController生命周期 UIViewController生命周期 posted on 2016-04-07 20:15 相而勿绝 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/fmdxiangdui/p/5365249.html

Spring的REST分页

这是有关使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第七篇。 本文将重点介绍RESTful Web服务中的分页实现 。 REST with Spring系列&#xff1a; 第1部分– 使用Spring 3.1和基于Java的配置引导Web应用程序 第2部分–…

众筹源码 php,助创cms众筹源码系统v1.0

什么是助创cms众筹系统?使用“预约团购”的众筹方式给自己的创意争取大家的关注和支持&#xff0c;是近年来非常火热的一种融资模式&#xff0c;助创cms众筹系统可以10分钟帮你打造一个和京东众筹一样的平台&#xff0c;包含产品众筹和公益众筹两个部分&#xff0c;可以直接拿…

Linq to SQL 的增删改查操作

Linq&#xff0c;全称Language Integrated Query&#xff0c;作为C#3.0新语法&#xff0c;是C#语言的一个扩展&#xff0c;可以将数据查询直接集成到编程语言本身中。 Linq表达式和SQL语句差不多&#xff0c;说白了就是颠倒sql语法&#xff0c; from where select ...&#xff…

扩展您的JPA POJO

可扩展性是许多体系结构的重要特征。 它衡量是否容易&#xff08;或困难&#xff09; 它是在不影响现有核心系统功能的情况下添加或更改功能。 让我们举一个简单的例子。 假设您的公司拥有一个核心产品来跟踪体育俱乐部中的所有用户。 在您的产品体系结构中&#xff0c;您有一个…

web框架--flask

flask介绍Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架&#xff0c;对于Werkzeug本质是Socket服务端&#xff0c;其用于接收http请求并对请求进行预处理&#xff0c;然后触发Flask框架&#xff0c;开发人员基于Flask框架提供的功能对请求进行…

php spider shell,ScrapyShell使用

Scrapy ShellScrapy终端是一个交互终端&#xff0c;我们可以在未启动spider的情况下尝试及调试代码&#xff0c;也可以用来测试XPath或CSS表达式&#xff0c;查看他们的工作方式&#xff0c;方便我们爬取的网页中提取的数据。如果安装了 IPython &#xff0c;Scrapy终端将使用 …