国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

使用七牛云存儲(chǔ)的一些經(jīng)驗(yàn)總結(jié)

Lyux / 3008人閱讀

摘要:原文使用七牛云存儲(chǔ)的一些經(jīng)驗(yàn)總結(jié)錯(cuò)誤處理如果在與七牛的交互中出現(xiàn)狀態(tài)碼為的錯(cuò)誤,一句話(huà),不要猶豫,直接聯(lián)系七牛技術(shù)支持。但是筆者發(fā)現(xiàn),在使用七牛云轉(zhuǎn)化后的視頻,這樣做是無(wú)效的。

近段時(shí)間將使用七牛云存儲(chǔ)來(lái)存放用戶(hù)上傳的數(shù)據(jù),客戶(hù)端通過(guò)七牛的js-sdk與七牛交互,服務(wù)端C#實(shí)現(xiàn)了七牛相關(guān)的接口。在這過(guò)程中多多少少遇到點(diǎn)問(wèn)題,在這里總結(jié)一下。原文:使用七牛云存儲(chǔ)的一些經(jīng)驗(yàn)總結(jié)

599錯(cuò)誤處理

如果在與七牛的交互中出現(xiàn)http狀態(tài)碼為599的錯(cuò)誤,一句話(huà),不要猶豫,直接聯(lián)系七牛技術(shù)支持。七牛的文檔也在很多地方提到這個(gè)錯(cuò)誤,都是指導(dǎo)大家去聯(lián)系技術(shù)支持的。筆者是在分塊上傳后的mkfile調(diào)用時(shí)出現(xiàn)的,聯(lián)系技術(shù)支持后,說(shuō)是調(diào)整了一下,讓我重試。后來(lái)就好了...

分塊上傳無(wú)法從回調(diào)中獲得文件的原始名

簡(jiǎn)單上傳采用的是multipart/form-data方式上傳,七牛服務(wù)端能夠從請(qǐng)求中獲得文件的原始名,并支持使用魔法變量$(fname)回調(diào)業(yè)務(wù)服務(wù)器。不過(guò)當(dāng)使用分片上傳的時(shí)候情況有所不同。分片上傳需要在最后調(diào)用mkfile,來(lái)將分片拼接起來(lái)。但是,mkfile接口支持普通的請(qǐng)求,并沒(méi)有附帶文件名,所以七牛也就無(wú)法獲得文件名,此時(shí)從$(fname)中是取不到文件名的。這個(gè)問(wèn)題我也向七牛技術(shù)支持提交了問(wèn)題,得到的結(jié)果是使用自定義變量mkfile支持將自定義變量放在url中,回調(diào)的時(shí)候自定義變量可以傳遞給業(yè)務(wù)服務(wù)器。

慎用圖片預(yù)處理

七牛云支持很多對(duì)文件的預(yù)處理,其中最常用的應(yīng)該就是圖片預(yù)處理了,可以對(duì)圖片的大小做變換等。七牛推薦使用GET的方式直接指定圖片處理結(jié)果的url,像這樣:

http://qiniuphotos.qiniudn.com/gogopher.jpg?imageView2/1/w/200/h/200

處理后的圖片會(huì)自動(dòng)緩存,用戶(hù)不用關(guān)心,只要每次訪(fǎng)問(wèn)都用這個(gè)url就行了。然而,筆者在開(kāi)始的時(shí)候,為了保持與其他文件形式統(tǒng)一的處理方法,對(duì)圖片使用了預(yù)處理(因?yàn)橐曨l什么的只能預(yù)處理),即在token中指定了預(yù)處理。此時(shí)問(wèn)題出現(xiàn)了,從后臺(tái)的日志看到,圖片的預(yù)處理通知回調(diào)竟然比正常的上傳成功回調(diào)還要快!這就導(dǎo)致預(yù)處理結(jié)果到來(lái)之前,我的業(yè)務(wù)服務(wù)器的數(shù)據(jù)庫(kù)中還沒(méi)有這個(gè)圖片,無(wú)法保存預(yù)處理結(jié)果了。所以推薦還是使用url直接處理,對(duì)圖片要慎用預(yù)處理

視頻文件無(wú)法快進(jìn)播放

通常用戶(hù)在觀(guān)看視頻的時(shí)候都會(huì)根據(jù)自己的喜好,快速將視頻定位到指定的時(shí)間播放。實(shí)現(xiàn)這個(gè)功能,需要視頻本身有關(guān)鍵幀信息、服務(wù)端需要支持關(guān)鍵幀播放請(qǐng)求,在這篇文章中有詳細(xì)討論。
但是筆者發(fā)現(xiàn),在使用七牛云轉(zhuǎn)化后的視頻,這樣做是無(wú)效的。于是咨詢(xún)技術(shù)支持,得到的答案是:轉(zhuǎn)化的文件是具有關(guān)鍵幀的,但七牛使用CDN加速,所以關(guān)鍵幀請(qǐng)求需要CDN的支持,如果想要用這個(gè)功能的話(huà),需要多帶帶聯(lián)系銷(xiāo)售或技術(shù)支持在CDN上配置,而且時(shí)間比較長(zhǎng)。筆者聯(lián)系了銷(xiāo)售和技術(shù)支持,說(shuō)是幫我配置,但到現(xiàn)在還沒(méi)有搞定,因?yàn)樽罱@個(gè)也不是特別重要,所以也沒(méi)有跟下去。

Callback校驗(yàn)

這是可選的一個(gè)步驟。由于七牛云會(huì)在上傳完成之后回調(diào)業(yè)務(wù)服務(wù)器,所以理論上說(shuō)業(yè)務(wù)服務(wù)器需要校驗(yàn)這個(gè)回調(diào)的合理性。原理在七牛的文檔中有,需要用到HMAC-SHA1簽名函數(shù)。但是七牛的sdk中沒(méi)有提供直接的方式來(lái)做校驗(yàn),在研讀文檔、多次失敗和查看sdk源碼后,筆者終于校驗(yàn)成功了。關(guān)鍵的分歧在于,文檔中的這句話(huà):

  

獲取明文:data = Request.URL.Path +” ” +Request.Body

這里的Request.URL.Path是否包含Querystring?答案是包含的!下面是筆者C#服務(wù)端的校驗(yàn)代碼,使用的是ASP.NET Web Api:

byte[] key = System.Text.Encoding.UTF8.GetBytes(Qiniu.Conf.Config.SECRET_KEY);
using (HMACSHA1 hmac = new HMACSHA1(key))
{
    var t = filterContext.Request.Content.ReadAsStringAsync();
    t.Wait();
    string rawbody = t.Result;
    log.DebugFormat("request"s rawbody : {0}", rawbody);
    string text = filterContext.Request.RequestUri.PathAndQuery + "
" + rawbody;
    log.DebugFormat("PathAndQuery + 
 + rawbody : {0}", text);
    byte[] digest = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(text));
    string computed = Qiniu.Util.Base64URLSafe.Encode(digest);
    log.DebugFormat("Computed hash after base64 : {0}", computed);

    IEnumerable auths;
    if (filterContext.Request.Headers.TryGetValues("Authorization", out auths) && auths.Count() == 1)
    {
        string auth = auths.First();
        log.DebugFormat("Authorization in header : {0}", auth);
        if (auth.StartsWith("QBox "))
        {
            var arr = auth.Substring(5).Split(":");
            if (arr.Length == 2)
            {
                if (arr[1] != computed)
                {
                    log.ErrorFormat("Authorization failed. Since auth from header {0} not equals computed {1}", arr[1], computed);
                }
                else
                {
                    log.Debug("Authorization success.");
                    //only pass can be return
                    return;
                }
            }
            else
            {
                log.Error("Callback Authorization"s format is invalid, can not find two part after split by ":".");
            }
        }
        else
        {
            log.Error("Callback Authorization"s format is invalid, missing leading "QBox ".");
        }
    }
    else
    {
        log.Error("The request from qiniu callback is missing "Authorization"");
    }

    filterContext.Response = filterContext.Request.CreateResponse(System.Net.HttpStatusCode.Forbidden);

}

如下幾個(gè)注意點(diǎn):

明文應(yīng)當(dāng)是請(qǐng)求的path+querystring部分和rawbody

對(duì)于.NET而言,明文和key都需要用UTF-8編碼變換成字節(jié)才能進(jìn)行簽名。而php中的hash_hmac函數(shù)完全不用這么復(fù)雜...

簽名的結(jié)果再用base64的url安全的方式編碼,再與請(qǐng)求的http頭部的Authorization比較

建議官方在文檔中加入一些相對(duì)底層一些的編程語(yǔ)言的實(shí)現(xiàn),php太高端了...

js-sdk實(shí)現(xiàn)略顯粗糙

在使用過(guò)程中,我發(fā)現(xiàn)官方的js-sdk有幾個(gè)我覺(jué)得不好的地方:

不能為每個(gè)文件獲取UpToken

試想,在文件上傳過(guò)程中有獲取UpToken是必須的,而且UpToken又需要包含預(yù)處理指令,不同的文件顯然需要不同的UpToken,而在js-sdk的實(shí)現(xiàn)中,只在初始化這個(gè)上傳組件對(duì)象的時(shí)候請(qǐng)求一次上傳憑證,后面所有的上傳都需要使用這個(gè)預(yù)先得到的UpToken:

uploader.bind("Init", function(up, params) {
    getUpToken();
});

于是我修改了這部分,在BeforeUpload事件中請(qǐng)求UpToken。建議官方考慮更改這個(gè)地方

只能實(shí)現(xiàn)分片上傳,無(wú)法斷點(diǎn)續(xù)傳

js-sdk的實(shí)現(xiàn)在分片上傳的實(shí)現(xiàn)上,是很簡(jiǎn)單的,不僅沒(méi)有使用分片,而是分塊(一塊4m,調(diào)用mkblk),而且沒(méi)有實(shí)現(xiàn)持久化ctx,或者類(lèi)似的回調(diào)或接口。4m分塊這個(gè)問(wèn)題還可以不追究,沒(méi)有實(shí)現(xiàn)持久化ctx就說(shuō)不過(guò)去了,不持久化怎么實(shí)現(xiàn)斷點(diǎn)續(xù)傳撒?!就算不實(shí)現(xiàn),也應(yīng)該給出回調(diào)的入口,讓調(diào)用者來(lái)實(shí)現(xiàn)持久化,而我實(shí)在無(wú)法找到這個(gè)"空子"可鉆,只能直接在源碼上改動(dòng)了。

沒(méi)有復(fù)用流行類(lèi)庫(kù)的東西

這個(gè)其實(shí)算不上問(wèn)題,因?yàn)樽鳛橐粋€(gè)不依賴(lài)jquery的sdk,當(dāng)然不能使用jquery現(xiàn)成的東西,比如ajax。不依賴(lài)jquery就算了,依賴(lài)plupload是幾個(gè)意思嘛,還依賴(lài)全局對(duì)象...于是最后,我干脆自己將sdk改成了Backbone的類(lèi),將不要的東西統(tǒng)統(tǒng)去掉,使用jquery和underscore簡(jiǎn)化代碼了...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/87567.html

相關(guān)文章

  • 使用七牛前必須要知道和理解

    摘要:如果看完此文依然不解的還想使用七牛的,請(qǐng)站內(nèi)信聯(lián)系明月,我可以收費(fèi)全套代勞,費(fèi)用不高配置快速當(dāng)天見(jiàn)效效果明顯免費(fèi)維護(hù)歡迎惠顧。 最近明月使用七牛加速自己博客初見(jiàn)成效后,也分享了不少七牛方面的經(jīng)驗(yàn),很多站長(zhǎng)也向明月咨詢(xún)了七牛方面的問(wèn)題,本著分享的精神,明月今天就當(dāng)一次義務(wù)的七牛推廣員給大家講解一番。showImg(https://segmentfault.com/img/bVMhUH?w...

    DevYK 評(píng)論0 收藏0
  • 使用七牛前必須要知道和理解

    摘要:如果看完此文依然不解的還想使用七牛的,請(qǐng)站內(nèi)信聯(lián)系明月,我可以收費(fèi)全套代勞,費(fèi)用不高配置快速當(dāng)天見(jiàn)效效果明顯免費(fèi)維護(hù)歡迎惠顧。 最近明月使用七牛加速自己博客初見(jiàn)成效后,也分享了不少七牛方面的經(jīng)驗(yàn),很多站長(zhǎng)也向明月咨詢(xún)了七牛方面的問(wèn)題,本著分享的精神,明月今天就當(dāng)一次義務(wù)的七牛推廣員給大家講解一番。showImg(https://segmentfault.com/img/bVMhUH?w...

    Enlightenment 評(píng)論0 收藏0
  • element 上傳組件 el-upload 經(jīng)驗(yàn)總結(jié)

    摘要:正文上傳圖片到七牛云這個(gè)需要前后端的配合才能實(shí)現(xiàn),這里是官方的參考鏈接。參考鏈接組件的怎么獲取進(jìn)度值谷歌找到的其一谷歌找到的其二完 前言 最近在做后臺(tái)管理項(xiàng)目,采用的 vue-element-admin ,上傳圖片是一個(gè)很常用的功能,也遇到了很多問(wèn)題,剛好趁此機(jī)會(huì)做一些總結(jié)。 初步總結(jié)下會(huì)提到的問(wèn)題,目錄如下: el-upload 自定義上傳方法 圖片上傳到七牛云 圖片壓縮后再上傳(...

    Neilyo 評(píng)論0 收藏0
  • 3 分鐘帶你走進(jìn)視覺(jué)智能新時(shí)代 | 牛云&美圖 AI 共享日精彩語(yǔ)錄

    摘要:月日下午,七牛云美圖共享日在廈門(mén)舉行,來(lái)自七牛云美圖廈門(mén)大學(xué)羅普特等眾位大咖齊聚一堂。七牛云美圖共享日精華語(yǔ)錄計(jì)算機(jī)識(shí)別是按照具體問(wèn)題具體分析,具體場(chǎng)景具體分析。又稱(chēng)小牛匯共享日,是小牛匯舉辦的第一個(gè)系列活動(dòng)。 時(shí)間機(jī)器、穿越星際的宇宙飛船、飛行汽車(chē),幾乎每一部科幻電影作品中都能發(fā)明點(diǎn)新東西。超現(xiàn)實(shí)技術(shù)在引起人們陣陣贊嘆的同時(shí),也在激勵(lì)著人們思考如何將不可能變成可能。而在我們的生活當(dāng)中...

    Jonathan Shieber 評(píng)論0 收藏0
  • 關(guān)于牛云正確使用姿勢(shì)探索

    摘要:,在后續(xù)測(cè)試時(shí)遇到一個(gè)詭異,當(dāng)文件過(guò)大時(shí),任務(wù)腳本上傳到七牛云失敗。當(dāng)我遇到大文件無(wú)法上傳到七牛云時(shí),斷點(diǎn)調(diào)試到這里,發(fā)現(xiàn)返回的是。后來(lái)還真被我找到了,七牛云官方提供一個(gè)腳本工具。 業(yè)務(wù)場(chǎng)景 需求 我們項(xiàng)目有一個(gè)文件上傳需求,需要從客戶(hù)端上傳到七牛云的對(duì)象存儲(chǔ)和自己的應(yīng)用服務(wù)器上。這里使用七牛云主要是實(shí)現(xiàn)下載分發(fā)。應(yīng)用服務(wù)器需要留一份是因?yàn)楹罄m(xù)需要做文件分析(并且是上傳后需要立馬分析出...

    3fuyu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<