❶ 使用金山雲的phpSDK報錯了,有誰知道嗎T.T
目的
本教程的目錄是通過三個例子介紹如何在Html表單提交直傳OSS第一個例子:講解簽名在客戶端(Javascript)完成,然後直接通過表單上傳到OSS, 注意這個例子有安全風險,推薦使用第二個例子和第三個例子第二個例子:講解簽名在服務端(php)完成,然後直接通過表單上傳到OSS第三個例子:講解簽名在服務端(php)完成, 並且服務端面設置了上傳後回調。然後直接通過表單上傳到OSS,OSS回調完應用伺服器再返回給用戶。
背景
每個用OSS的用戶,都會用到上傳。由於是網頁上傳,其中包括一些APP裡面的html5頁面,對上傳的需求很強烈,很多人採用的做法是用戶在瀏覽器/APP上傳到應用伺服器,然後應用伺服器再把文件上傳到OSS。
這種方法有三個缺點,
第一:上傳慢,先上傳到應用伺服器,再上傳到OSS,網路傳送多了一倍,而且OSS是採用BGP帶寬,能保證各地各運營商的速度。
第二:擴展性不好,如果後續用戶多了,應用伺服器會成為瓶頸。
第三:費用高,因為OSS上傳流量是免費的。如果數據直傳到OSS,不走應用伺服器。那麼將能省下幾台應用伺服器。
改進方案1:客戶端用JS直接簽名,然後上傳到OSS示例
下面我將介紹用plupload ,在JS端簽名然後直傳數據到OSS的例子用戶電腦瀏覽器測試樣例:http://oss-demo.aliyuncs.com/oss-h5-upload-js-direct/index.html用手機測試該上傳是否有效。二維碼:可以用手機(微信,QQ,手機瀏覽器等)掃一掃試試(這個不是廣告,只是上述網址的二維碼。這為了讓大家看一下這個實現能在手機端完美運行。)文件上傳是上傳到一個測試的公共 bucket , 會定時清理,所以不要傳一些敏感及重要數據代碼下載
oss-h5-upload-js-direct.tar.gz (381 K) 下載次數:1100原理
本例子的功能
1.採用plupload 直接提高表單數據(即PostObject)到OSS2.支持html5,flash,silverlight,html4 等協議上傳3. 可以運行在PC瀏覽器,手機瀏覽器,微信等4.可以選擇多文件上傳
5.顯示上傳進度條
6.可以控制上傳文件的大小
OSS的PostObject API細節可以參照(看不懂沒有關系):
https://docs.aliyun.com/#/pub/oss/api-reference/object&PostObjectplupload
plupload是一款簡單易用且功能強大, 擁有多種上傳方式,(html5, flash, silverlight, html4)等方式,會智能檢測當前環境選擇最適合的方式,並且會優先採用Html5, 所以不用花心思去當前的瀏覽器要用何種方式上傳,plupload會幫您考慮好。
關鍵代碼
因為OSS原生支持POST協議。所以只要將plupload在發送POST請求時,帶上OSS簽名即可。
核心代碼如下:
復制代碼
var uploader = new plupload.Uploader({
runtimes : 'html5,flash,silverlight,html4',browse_button : 'selectfiles',
//runtimes : 'flash',
container: document.getElementById('container'),flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',url : host,
multipart_params: {
'Filename': '${filename}',
'key' : '${filename}',
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //讓服務端返回200,不然,默認會返回204'signature': signature,
},
....
}
簽名signature主要是對policyText進行簽名,最簡單的例子如下:
復制代碼
var policyText = {
"expiration": "2020-01-01T12:00:00.000Z", // 設置該Policy的失效時間,超過這個失效時間之後,就沒有辦法通過這個policy上傳文件了"conditions": [
["content-length-range", 0, 1048576000] // 設置上傳文件的大小限制,如果超過了這個大小,文件上傳到OSS會報錯的]
}
Cors
注意:如果一定要保證bucket屬性Cors設置支持POST方法。因為這個HTML直接上傳到OSS,會產生跨域請求。必須在bucket屬性裡面設置允許跨域設置如下圖:
進階篇-應用伺服器php返回簽名
背景
上述例子有一個很嚴重的安全隱患。就是OSS AccessId/AccessKey暴露在前端頁面。可以隨意拿到accessid/accesskey. 這是非常不安全的做法將此例子進化,簽名及上傳policy從後端php代碼取。
請求邏輯是:
1.客戶端要上傳圖片時,到應用伺服器取上傳的policy及簽名2.客戶端拿到簽名直接上傳到OSS
示例
直接用網頁訪問:http://oss-demo.aliyuncs.com/oss-h5-upload-js-php/index.html用手機測試該上傳是否有效。二維碼:可以用手機(微信,QQ,手機瀏覽器等)掃一掃試試(這個不是廣告,只是上述網址的二維碼。這為了讓大家看一下這個實現能在手機端完美運行。)文件上傳是上傳到一個測試的公共 bucket , 會定時清理,所以不要傳一些敏感及重要數據代碼下載
oss-h5-upload-js-php.tar.gz (382 K) 下載次數:600原理
設置plupload 上傳參數如下:
復制代碼
multipart_params: {
'key' : key + '${filename}'//後面會介紹到,key是應用伺服器返回的,指定用戶必須以這個前綴上傳文件。
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //讓服務端返回200,不然,默認會返回204'signature': signature,
},
js最主要是從後端取到policyBase64, 及accessid,及signature這三個變數。 往後端取這三個變數核心代碼如下:
復制代碼
phpUrl = './php/get.php'
xmlhttp.open( "GET", phpUrl, false );
xmlhttp.send( null );
var obj = eval ("(" + xmlhttp.responseText+ ")");host = obj['host']
policyBase64 = obj['policy']
accessid = obj['accessid']
signature = obj['signature']
expire = parseInt(obj['expire'])
key = obj['dir']
現在咱們來一起解析一下xmlhttp.responseText(這個是我設計的范圍,並不一定要求是以下的格式,但是必須有signature, accessid, policy這三個值)復制代碼
{"accessid":"6MKOqxGiGU4AUk44",
"host":"http://post-test.oss-cn-hangzhou.aliyuncs.com","policy":"","signature":"I2u57FWjTKqX\/AE6doIdyff151E=","expire":1446726203,"dir":"user-dir/"}
第一個變數accessid: 指的用戶請求的accessid,注意單知道accessid, 對數據不會有影響。
第二個變數host: 指的是用戶要往哪個域名發往上傳請求。
第三個變數policy:指的是用戶表單上傳的策略policy, 是經過base64編碼過的字元串第四個變更signature:是對上述第三個變數policy簽名後的字元串第五個變數expire:指的是當前上傳策略失效時間,這個變數,並不是用來發送到OSS,因為這個已經指定在policy裡面,這個變數的含義,後面講。
現在咱們分析一下policy的內容,將其解碼後的內容是:
復制代碼
{"expiration":"2015-11-05T20:23:23Z",
"conditions":[["content-length-range",0,1048576000],["starts-with","$key","user-dir\/"]]
這里有一個關鍵的地方,PolicyText指定了該Policy 上傳失效的最終時間。即在這個失效時間之前,都可以利用這個policy上傳文件,所以沒有必要每次上傳,都去後端取簽名。減少後端的壓力。在這里我的設計是:初始化上傳時,每上傳一個文件後,取一次簽名。然後再上傳時,將當前時間跟簽名時間對比,看是簽名時間是否失效了。如果失效了,就重新取一次簽名,如果沒有失效就不取。這里就用到了第五個變數expire核心代碼如下:
復制代碼
now = timestamp = Date.parse(new Date()) / 1000;[color=#000000]//可以判斷當前expire是否超過了當前時間,如果超過了當前時間,就重新取一下.3s 做為緩沖[/color]
if (expire < now + 3)
{
.....
phpUrl = './php/get.php'
xmlhttp.open( "GET", phpUrl, false );
xmlhttp.send( null );
......
}
return .
再看一下上面policy 的內容比上面增加了starts-with, 這個指定此次上傳的文件名,必須是user-dir開頭(這個字元串,用戶可以自己指定)為什麼要增加這個的含義是:很多場景,一個應用一個bucket,不同用戶的數據,為了防止數字覆蓋,每個人上傳到OSS,可以有特定的前綴。那麼問題來了,那用戶獲取到這個policy後,是不是在失效期內,都能修改上傳前綴,從而上傳到別人的目錄呢?所以,應用伺服器可以在上傳時就指定讓用戶傳文件時,必須是某個前綴。如果用戶拿到了policy他也沒有辦法上傳別人的前綴上。保證了數據的安全性。
終級篇--應用伺服器php返回簽名及採用上傳回調背景
當採用第二個方案後,問題來了,用戶來了數據,並且上傳數據後,很多場景下,應用伺服器都要知道用戶上傳了哪些文件,文件名字,甚至如果是圖片的話,圖片的大小等。為此OSS開發了上傳回調功能。
千萬注意
上傳回調功能目前只開放了兩個域, 杭州跟北京(即通過oss.aliyuncs.com, oss-cn-hangzhou.aliyuncs.com, oss-cn-beijing.aliyuncs.com 這三個域名能調用上傳回調)。 只有上傳域名是這兩個域,才能調用上傳回調。
增加了請求回調後,用戶的請求邏輯如下:
第一:用戶先向應用伺服器取到上傳policy和回調設置第二:應用伺服器返回上傳policy和回調
第二:用戶直接向OSS發送文件上傳請求
第三:等文件數據上傳完,OSS給用戶Response前,OSS會根據用戶的回調設置,請求用戶的伺服器。
第四:如果應用伺服器返回成功,那麼就返回用戶成功,如果應用伺服器返回失敗,那麼OSS也返回給用戶失敗。這樣確保了用戶上傳成功的照片,應用伺服器都已經收到通知了。
第五:應用伺服器給OSS返回。
第六:OSS將應用伺服器返回的內容返回給OSS。
上傳回調功能目前只開放了兩個域, 杭州跟北京(即通過oss.aliyuncs.com, oss-cn-hangzhou.aliyuncs.com, oss-cn-beijing.aliyuncs.com 這三個域名能調用上傳回調)。 只有上傳域名是這兩個域,才能調用上傳回調。
示例
示例:http://oss-demo.aliyuncs.com/oss-h5-upload-js-php-callback/index.html用手機測試該上傳是否有效。二維碼:可以用手機(微信,QQ,手機瀏覽器等)掃一掃試試(這個不是廣告,只是上述網址的二維碼。這為了讓大家看一下這個實現能在手機端完美運行。)文件上傳是上傳到一個測試的公共 bucket , 會定時清理,所以不要傳一些敏感及重要數據代碼要添加的東西
復制代碼
new_multipart_params = {
'key' : key + '${filename}',
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //讓服務端返回200,不然,默認會返回204'callback': callbackbody,
'signature': signature,
};
上述的callbackbody 是php服務端返回的。在本例中,從後端php取到的內容如下:
復制代碼
{"accessid":"6MKOqxGiGU4AUk44",
"host":"http:\/\/post-test.oss-cn-hangzhou.aliyuncs.com","policy":"","signature":"VsxOcOudxDbtNSvz93CLaXPz+4s=","expire":1446727949,
"callback":"uY29kZWQifQ==","dir":"user-dir\/"}
上面提到callbackbody, 就是上述返回結果裡面的callback內容,經過base64編碼後的。
解碼後的內容如下:
復制代碼
{"callbackUrl":"http://oss-demo.aliyuncs.com:23450","callbackHost":"oss-demo.aliyuncs.com",
"callbackBody":"filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}","callbackBodyType":"application/x-www-form-urlencoded"}
內容的解析如下:
CallbackUrl: 指的是oss往這個機器發送的url請求。
callbackHost:指的的oss發送這個請求時,請求頭部所帶的Host頭callbackBody: OSS請求時,發送給應用伺服器的內容,可以包括文件的名字,大小,類型,如果是圖片可以是圖片的高度,寬度callbackBodyType: 請求發送的Content-Type
代碼下載
oss-h5-upload-js-php-callback.tar.gz (412 K) 下載次數:522應用伺服器
在上述有一個很重要的地方就是第四步和第五步,OSS與應用伺服器交互的時候,問題1:如果我是開發者,那麼我要怎麼樣確認請求是從OSS發送過來的呢?
答案:OSS發送請求時,會跟應用伺服器構造簽名。兩者通過簽名保證。
問題2: 這個簽名是怎麼做的?或者有示例代碼嗎?
答案:有的。我上面的例子裡面是Callback應用伺服器的例子是:http://oss-demo.aliyuncs.com:23450 (目前只支持linux)上面運行的代碼是:
callback_app_server.py.zip (2 K) 下載次數:365運行方案,在linux下面直接執行裡面的文件:
python callback_app_server.py
即可,程序自實現了一個簡單的http server.
是不是很簡單!!!!
總結
第一個例子:講解如何在JS直接簽名,直接表單上傳到OSS oss-h5-upload-js-direct.tar.gz (381 K)
第二個例子:講解如何在從後端PHP獲取簽名,然後直接表單上傳到OSS oss-h5-upload-js-php.tar.gz (382 K)
第三個例子:講解如何在從後端PHP獲取簽名及上傳後回調。然後直接表單上傳到OSS,OSS回調完應用伺服器再返回給用戶。 oss-h5-upload-js-php-callback.tar.gz (412 K)
❷ 金山快盤的同步方式是怎麼樣的
根據我的理解應該是這樣的。你打開1電腦系統之後打開快盤客戶端,然後開始放文件,然後文件自動上傳到伺服器。然後你再打開2電腦系統之後打開客戶端,這時快盤程序只會掃描你2電腦上快盤文件夾里的文件情況與伺服器對比(對比創建時間),然後把沒有的下載下來,而存在的相同文件的不同版本會提示你是否更新到伺服器上去(對比修改時間)。刪除的具體操作比如你在電腦系統里點刪除了,會通過客戶端監視到然後發往伺服器一個指令,把伺服器上的文件也刪除掉,而不會說是你打開系統打開客戶端檢查到沒有那個文件就通知伺服器刪除了,相反它這時會創建出來。而2電腦上的文件由於創建時間或其他條件對比分析程序也會刪除掉的。
它的每個操作都是會記錄時間的,是先後有分的,所以每次更新或刪除的操作機制都應該是比較嚴謹的。像這種軟體肯定不會出現你所說的那種情況,那些問題應該是在產品的需求分析時就已經解決了的。
以上說白了還是我的猜想,具體它是怎麼操作的其實你可以實際實驗一下,畢竟實踐出真知嘛。不過應該和我猜想的情況出入不大。
❸ 國內雲伺服器哪家好
國內雲伺服器較為著名的商家有:阿里雲、騰訊雲、華為雲、天翼雲、金山雲、UCloud、青雲QingCloud、網路雲、盛大雲、世紀互聯藍雲。
1、阿里雲
2009年9月,阿里巴巴集團在十周年慶典上宣布成立子公司「阿里雲」,該公司將專注於雲計算領域的研究和研發。「阿里雲」也成為繼阿里巴巴、淘寶、支付寶、阿里軟體、中國雅虎之後的阿里巴巴集團第八家子公司。
阿里雲計算有限公司成立於2009年9月10日,在杭州、北京和矽谷等地設有研發中心和運營機構。阿里雲的目標是打造互聯網數據分享第一平台,成為以數據為中心的雲計算服務公司。
2、騰訊雲
騰訊公司傾力打造的面向廣大企業和個人的互聯網+服務平台,高質量的公有雲服務平台,提供雲伺服器/雲資料庫/CDN和域名注冊等基礎雲計算服務。
騰訊雲-騰訊公司傾力打造的面向廣大企業和個人的公有雲平台;提供雲伺服器、雲資料庫、雲存儲和CDN等基礎雲計算服務,以及提供微信、游戲、移動應用等行業解決方案。
9、盛大雲
上海盛大網路發展有限公司,盛大雲,盛大集團旗下,國內較早推出按需計費的雲主機,基於Key-Value的雲存儲,致力於提供定製雲服務和園區綜合雲方案的科技型企業
盛大雲(www.grandcloud.cn)隸屬於上海盛大網路發展有限公司,是在整合盛大集團資源的基礎上,自主技術研發而成的公有雲平台。2011年7月22日,盛大雲宣布開放公測。盛大雲服務的企業類型豐富,囊括電商類、游戲類、網站類、社交類、教育類等企業。
10、世紀互聯藍雲
上海藍雲母公司世紀互聯(NASDAQ: VNET)是中國較大的中立電信互聯網基礎設施服務提供商,並於2011 年4月在納斯達克成功上市。世紀互聯向客戶提供業界伺服器及網路設備託管服務、管理式網路服務、內容分發網路及雲計算服務。世紀互聯在全國40多個城市運營80多家分布式數據中心,擁有超過2000家多樣化的穩定客戶群體。
2012年11月,微軟、世紀互聯和上海市政府共同宣布戰略合作夥伴協議,由微軟向世紀互聯授權技術,世紀互聯成立全資子公司在中國運營並向中國客戶提供 Office 365 和 Windows Azure 的服務。
選購要點
一、雲伺服器商的機房實力
通常國內的很多IDC服務商所運營的機房也不一樣,根據機房環境不同,雲服務質量也差異很大。小機房易出問題,穩定性差,帶寬規模小。電信級大機房標准化設計,設備品質高。
二、雲伺服器的帶寬質量
雲伺服器雖建立在集群伺服器之上,但性能受帶寬直接影響,購買租用之前,我們需要測試一下其網路的ping值速度,看看帶寬是否充足。
三、雲伺服器硬體配置
雲伺服器通常可自選CPU、內存、硬碟等配置,搭載這些配置的硬體資源非常重要,直接關繫到雲伺服器的響應速度、穩定運行的速度。
四、雲伺服器租用價格
大家有時候不要看某些雲服務商提供的雲主機價格比較低,可能其技術能力和售後水平也低,出現問題難以及時處理。因此,我們在比對價格的同時,也要特別關注服務商的技術服務能力以及客服響應速度。
❹ 想知道金山雲是什麼大家會用金山雲嗎
2017年,金山雲在國內市場份額中排名第三。在巨大的雲計算市場中,金山雲能連續兩次保持三位數的增長,確實超出了很多人的預期。金山雲上有很多游戲、視頻廠商,他們對安全性的要求非常嚴格。李明磊作為金山雲的安全技術總監,經歷了很多針對黑客的攻防戰,對於金山雲的安全和雲計算,他也有很多有趣的理解。受綠盟雲邀請,"別人家的安全運維 "實踐分享系列專題小組走進金山。
2020年5月8日,金山雲在美國THE NASDAQ股票市場上市,成為中國唯一一家在美國上市的純雲服務廠商。這也是繼2007年赴港上市的金山軟體、2018年赴港上市的小米集團、2019年在國內科創板上市的金山辦公軟體之後,雷軍掌控的第四家公司。
金山雲的IPO價格定為每股17美元,首發當日開盤價為20.37美元。盤中,金山雲大漲40.24%,收於23.84元,市值47.74億元。面對市場,雷軍表示,這說明金山雲一方面做得好,另一方面生逢其時,在這一點上,全球投資者對雲服務的認可達到了一定程度。這場大流行對雲服務來說是一場宣傳戰役,因為在家工作和家庭教育是雲服務應用的一個巨大機會。企業的數字化轉型和數字經濟的發展,為雲計算提供了廣闊的市場空間。看到這個機會,積極參與競爭的不僅是擁有重金、資源和人才的巨頭,還有很多初創公司。
❺ 聽說過網易雲呀,和阿里雲,騰訊雲,金山雲比怎麼樣
就我自己熟悉的幾個雲伺服器,我對比一下:
阿里雲
阿里巴巴集團出資興辦,在杭州、北京和矽谷等地設有研製和運營組織。阿里雲是阿里巴巴收買萬網後的商品,供給了多款雲主機商品:雲伺服器、網站雲、電商雲,其中雲伺服器首要服務於公司用戶,報價稍高;網站雲、電商雲適合中小站長,但限制了只能裝置幹流搭站程序。
騰訊雲
於2013年9月新近上線,騰訊雲便已為多家著名網游提供服務。騰訊雲伺服器提供多達20種安全防護手段,使用公共平台操作系統,騰訊雲專業團隊完全負責雲主機的維護。騰訊雲伺服器提供豐富配置類型虛擬機,數據保留4份,用戶可以便捷地進行數據緩存、資料庫處理與搭建web伺服器等工作。
小鳥雲
小鳥雲伺服器全線採用高端Intel Haswell CPU,能夠針對企業的不同需求提供多種功能,三級緩存擴展至20M,性能相比上代提升至少3倍 ;內存採用最新DDR4內存條,比傳統DDR3性能高出70%,數據的訪問速度快;磁碟採用高速Sas3 SSD高頻固態硬碟,可滿足Sas介面系統的所有需求,提高用戶資料庫性能。同時還針對不同行業用戶推出完善的行業解決方案定製,幫助用戶構建雲計算環境。
網易雲場景化雲服務,垂直化服務,針對性比較強,應該還不錯。