影音先锋男人资源站_国产婷婷综合丁香亚洲欧洲_白狐视频传媒污软件下载_趁女同学午休揉她的屁股

Azure 存儲(chǔ)的斷點(diǎn)續(xù)傳與 MD5 校驗(yàn)-ESG跨境

Azure 存儲(chǔ)的斷點(diǎn)續(xù)傳與 MD5 校驗(yàn)

來(lái)源網(wǎng)絡(luò)
來(lái)源網(wǎng)絡(luò)
2022-07-05
點(diǎn)贊icon 0
查看icon 751

Azure 存儲(chǔ)的斷點(diǎn)續(xù)傳與 MD5 校驗(yàn)Azure 存儲(chǔ)的斷點(diǎn)續(xù)傳與 MD5 校驗(yàn)問(wèn)題分析首先關(guān)于 Azure 存儲(chǔ)中 MD5 的描述,我們已經(jīng)有相關(guān)的介紹文檔,如果對(duì)于存儲(chǔ)中 MD5 的描述不熟悉,可以先參考 Azure Blob 存儲(chǔ)基于 MD5 的完整性檢查的內(nèi)容。如果直接將文件上傳到 Blob 中可以在上傳的......

Azure 存儲(chǔ)的斷點(diǎn)續(xù)傳與 MD5 校驗(yàn)




Azure 存儲(chǔ)的斷點(diǎn)續(xù)傳與 MD5 校驗(yàn)

問(wèn)題分析

首先關(guān)于 Azure 存儲(chǔ)中 MD5 的描述,我們已經(jīng)有相關(guān)的介紹文檔,如果對(duì)于存儲(chǔ)中 MD5 的描述不熟悉,可以先參考 Azure Blob 存儲(chǔ)基于 MD5 的完整性檢查的內(nèi)容。

如果直接將文件上傳到 Blob 中可以在上傳的方法中配置 BlobRequestOptions 類,將該類的 StoreBlobContentMD5 參數(shù)設(shè)置為 true,即可在上傳時(shí)自動(dòng)計(jì)算 MD5 值并將此值寫(xiě)入到請(qǐng)求頭部(ContentMD5)中(可以參考 BlobRequestOptions.StoreBlobContentMD5 Property 此文檔的描述)。 但是如果使用斷點(diǎn)續(xù)傳的方法,是將文件分為多個(gè)塊上傳,之后通過(guò) PubBlockList 請(qǐng)求完成組合,那么想要上傳 MD5 值,需要在 PubBlockList 請(qǐng)求的頭部添加 xmsblobcontentmd5 參數(shù),但是在 sdk 相關(guān)的方法中,BlobRequestOptions 中并沒(méi)有關(guān)于該參數(shù)的屬性,所以如果使用斷點(diǎn)續(xù)傳,采用 sdk 的 PubBlockList() 方法無(wú)法將 MD5 值上傳上去,本篇文檔即要解決如何在斷點(diǎn)續(xù)傳時(shí)上傳 MD5 值的問(wèn)題。

解決方案

可以通過(guò)使用 REST API 的方式來(lái)解決此問(wèn)題:

1.首先我們需要計(jì)算出文件的 MD5 值:

string contentHash = md5()(File.ReadAllBytes(sourcePath));

2.將文件分塊上傳:

public async Task PutBlobAsync(String containerName, String blobName, byte[] blobContent, String blobid, bool error = false)

{

  String requestMethod = PUT;

  String urlPath = String.Format({0}/{1}, containerName, blobName) +  comp=blockblockid= + blobid;

  String storageServiceVersion = 20150221;

  String dateInRfc1123Format = DateTime.UtcNow.ToString(R, CultureInfo.InvariantCulture);

  Int32 blobLength = blobContent.Length;

  //headers

  String canonicalizedHeaders = String.Format(

    \nxmsdate:{0}\nxmsversion:{1},

    dateInRfc1123Format,

    storageServiceVersion);

  //resources

  String canonicalizedResource = String.Format(/{0}/{1}, AzureConstants.Account, String.Format({0}/{1}, containerName, blobName) + \nblockid: + blobid + \ncomp:block);

  String stringToSign = String.Format(

  {0}\n\n\n{1}\n\n\n\n\n\n\n\n{2}\n{3},

  requestMethod,

  blobLength,

  canonicalizedHeaders,

  canonicalizedResource);

  string authorizationHeader = CreateAuthorizationHeader(stringToSign);

  //上傳url

  Uri uri = new Uri(BlobEndPoint + urlPath);

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

  request.Method = requestMethod;

  request.Headers[xmsdate] = dateInRfc1123Format;

  request.Headers[xmsversion] = storageServiceVersion;

  request.Headers[Authorization] = authorizationHeader;

  request.ContentLength = blobLength;

  try {

    using (Stream requestStream = await request.GetRequestStreamAsync()) {

      requestStream.Write(blobContent, 0, blobLength);

    }

    using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) {

      String ETag = response.Headers[ETag];

      System.Console.WriteLine(ETag);

    }

    error = false;

  }

  catch (WebException ex) {

    System.Console.WriteLine(An error occured. Status code: + ((HttpWebResponse)ex.Response).StatusCode);

    System.Console.WriteLine(Error information:);

    error = true;

    using (Stream stream = ex.Response.GetResponseStream()) {

      using (StreamReader sr = new StreamReader(stream)) {

        var s = sr.ReadToEnd();

        System.Console.WriteLine(s);

      }

    }

  }

}

3.在 PutBlobListAsync() 方法中將 MD5 值和 xmsblobcontentmd5 寫(xiě)入到請(qǐng)求頭中:

public async Task PutBlobListAsync(String containerName, String blobName, Liststring blobIdList, string md5, bool error = false)

{

  String requestMethod = PUT;

  String urlPath = String.Format({0}/{1}, containerName, blobName) + ?comp=blocklist;

  String storageServiceVersion = 20150221;

  String dateInRfc1123Format = DateTime.UtcNow.ToString(R, CultureInfo.InvariantCulture);

  String canonicalizedHeaders = String.Format(

    \nxmsblobcontentmd5:{0}\nxmsdate:{1}\nxmsversion:{2},

    md5,

    dateInRfc1123Format,

    storageServiceVersion);

  StringBuilder stringbuilder = new StringBuilder();

  stringbuilder.Append(BlockList);

  foreach (string item in blobIdList) {

    stringbuilder.Append( Latest + item + /Latest);

  }

  stringbuilder.Append(/BlockList);

  byte[] data = Encoding.UTF8.GetBytes(stringbuilder.ToString());

  Int32 blobLength = data.Length;

  String canonicalizedResource = String.Format(/{0}/{1}, AzureConstants.Account, String.Format({0}/{1}, containerName, blobName) + \ncomp:blocklist);

  String stringToSign = String.Format(

    {0}\n\n\n{1}\n\n\n\n\n\n\n\n{2}\n{3},

    requestMethod,

    blobLength,

    canonicalizedHeaders,

    canonicalizedResource);

  String authorizationHeader = CreateAuthorizationHeader(stringToSign);

  Uri uri = new Uri(BlobEndPoint + urlPath);

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

  request.Method = requestMethod;

  request.Headers[xmsblobcontentmd5] = md5;

  request.Headers[xmsdate] = dateInRfc1123Format;

  request.Headers[xmsversion] = storageServiceVersion;

  request.Headers[Authorization] = authorizationHeader;

  request.ContentLength = blobLength;

  try {

    using (Stream requestStream = await request.GetRequestStreamAsync()) {

      requestStream.Write(data, 0, blobLength);

    }

    using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) {

      String ETag = response.Headers[ETag];

      System.Console.WriteLine(ETag);

    }

    error = false;

  }

  catch (WebException ex) {

    System.Console.WriteLine(An error occured. Status code: + ((HttpWebResponse)ex.Response).StatusCode);

    System.Console.WriteLine(Error information:);

    error = true;

    using (Stream stream = ex.Response.GetResponseStream()) {

      using (StreamReader sr = new StreamReader(stream)) {

        var s = sr.ReadToEnd();

        System.Console.WriteLine(s);

      }

    }

  }

}

完整示例請(qǐng)參考示例代碼。


文章推薦
AppGallery Connect Server常見(jiàn)問(wèn)題解答,huawei appgallery
Google play該怎么上傳馬甲包,google play服務(wù)停止運(yùn)行怎么解決
Google Ads推廣狀態(tài)受限怎么辦,google ads怎么解封
Google AdMob 2021年推出新廣告形式激勵(lì)插頁(yè)式廣告單元,如何提高google廣告投放


特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問(wèn)題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。

搜索 放大鏡
韓國(guó)平臺(tái)交流群
加入
韓國(guó)平臺(tái)交流群
掃碼進(jìn)群
歐洲多平臺(tái)交流群
加入
歐洲多平臺(tái)交流群
掃碼進(jìn)群
美國(guó)賣家交流群
加入
美國(guó)賣家交流群
掃碼進(jìn)群
ESG跨境專屬福利分享群
加入
ESG跨境專屬福利分享群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
亞馬遜跨境增長(zhǎng)交流群
加入
亞馬遜跨境增長(zhǎng)交流群
掃碼進(jìn)群
亞馬遜跨境增長(zhǎng)交流群
加入
亞馬遜跨境增長(zhǎng)交流群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
ESG獨(dú)家招商-PHH GROUP賣家交流群
加入
ESG獨(dú)家招商-PHH GROUP賣家交流群
掃碼進(jìn)群
2025跨境電商營(yíng)銷日歷
《2024年全球消費(fèi)趨勢(shì)白皮書(shū)——美國(guó)篇》
《2024TikTok出海達(dá)人營(yíng)銷白皮書(shū)》
《Coupang自注冊(cè)指南》
《eMAG知識(shí)百科》
《TikTok官方運(yùn)營(yíng)干貨合集》
《韓國(guó)節(jié)日營(yíng)銷指南》
《開(kāi)店大全-全球合集》
《TikTok綜合運(yùn)營(yíng)手冊(cè)》
《TikTok短視頻運(yùn)營(yíng)手冊(cè)》
通過(guò)ESG入駐平臺(tái),您將解鎖
綠色通道,更高的入駐成功率
專業(yè)1v1客戶經(jīng)理服務(wù)
運(yùn)營(yíng)實(shí)操指導(dǎo)
運(yùn)營(yíng)提效資源福利
平臺(tái)官方專屬優(yōu)惠

立即登記,定期獲得更多資訊

訂閱
聯(lián)系顧問(wèn)

平臺(tái)顧問(wèn)

平臺(tái)顧問(wèn) 平臺(tái)顧問(wèn)

微信掃一掃
馬上聯(lián)系在線顧問(wèn)

icon icon

小程序

微信小程序

ESG跨境小程序
手機(jī)入駐更便捷

icon icon

返回頂部

【免費(fèi)領(lǐng)取】全球跨境電商運(yùn)營(yíng)干貨 關(guān)閉
進(jìn)行中
進(jìn)行中
2025跨境電商營(yíng)銷日歷
包括傳統(tǒng)中、外重要節(jié)日及重點(diǎn)電商營(yíng)銷節(jié)點(diǎn)還對(duì)營(yíng)銷關(guān)鍵市場(chǎng)、選品輔以說(shuō)明,讓你的365天安排的明明白白!
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
【平臺(tái)干貨】eMAG知識(shí)百科
涵蓋從開(kāi)店到大賣6個(gè)板塊:開(kāi)店、運(yùn)營(yíng)、廣告、選品、上架、物流
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
TikTok運(yùn)營(yíng)必備干貨包
包含8個(gè)TikTok最新運(yùn)營(yíng)指南(市場(chǎng)趨勢(shì)、運(yùn)營(yíng)手冊(cè)、節(jié)日攻略等),官方出品,專業(yè)全面!
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
韓國(guó)coupang平臺(tái)自注冊(cè)指南
韓國(guó)Coupang電商平臺(tái)從注冊(cè)準(zhǔn)備、提交申請(qǐng)到完成注冊(cè),開(kāi)店全流程詳細(xì)指引。
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——全球合集
涵括全球100+個(gè)電商平臺(tái)的核心信息,包括平臺(tái)精煉簡(jiǎn)介、競(jìng)爭(zhēng)優(yōu)勢(shì)、熱銷品類、入駐要求以及入駐須知等關(guān)鍵內(nèi)容。
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
韓國(guó)電商節(jié)日營(yíng)銷指南
10+韓國(guó)電商重要營(yíng)銷節(jié)點(diǎn)詳細(xì)解讀;2024各節(jié)日熱度選品助力引爆訂單增長(zhǎng);8大節(jié)日營(yíng)銷技巧輕松撬動(dòng)大促流量密碼。
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——?dú)W洲篇
涵蓋20+歐洲電商平臺(tái),詳細(xì)解讀優(yōu)勢(shì)、入駐條件、熱銷品等
立即領(lǐng)取