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.pswp.cn/news/373298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373298.shtml
英文地址,請注明出處:http://en.pswp.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終端將使用 …