1

「window azure cloud service」を使用して、このような azure blob ファイルをアップロード/ダウンロードするアプリケーションを作成しました

コードのアップロード

public ActionResult UploadImage_post(HttpPostedFileBase fileBase)
    {
        if (fileBase.ContentLength > 0)
        {
            Microsoft.WindowsAzure.StorageClient.CloudBlobContainer blobContainer =
                _myBlobStorageService.GetCloudBlobContainer();

            Microsoft.WindowsAzure.StorageClient.CloudBlob blob =
                blobContainer.GetBlobReference(fileBase.FileName);

            blob.UploadFromStream(fileBase.InputStream);
        }
        return RedirectToAction("UploadImage");
    }

コードをダウンロード

Microsoft.WindowsAzure.StorageClient.CloudBlobContainer blobContainer =
         _myBlobStorageService.GetCloudBlobContainer();

        Microsoft.WindowsAzure.StorageClient.CloudBlob blob =
            blobContainer.GetBlobReference(filename);

return Redirect(blobContainer.GetBlobReference(filename).Uri.AbsoluteUri);

これが私の見解です

@foreach (var item in Model)
{
        <img src="@item" width="200" height="100" />
        <a href="/Blob/Download?filename=@item">Download</a> 
}

状況は、ユーザーのダウンロード制限を設定しているため、「ダウンロード制限」に達しているかどうかを確認できるように、ダウンロードする前にファイルサイズを取得する必要があります。

ここに画像の説明を入力

「Data Left」フィールドがあることがわかります。別のファイルをダウンロードする前に、次のことを確認する必要があります

    Downloaded File size > Data Left

その後、ダウンロードする必要はありません。

提案してください

4

1 に答える 1

1

ダウンロードに十分な帯域幅があるかどうかを判断する前に、ブロブのサイズを確認する必要があります。

Microsoft.WindowsAzure.StorageClient.CloudBlob blob =
            blobContainer.GetBlobReference(filename);

blob.FetchAttributes();

var blobsize = blob.Properties.Length; // this is in bytes
// is size less than bandwidth left. etc

スポイラー : これは実際に BLOB に対してクエリを実行するため、リクエストを待たなければならないというレイテンシの増加は言うまでもなく、ヒットごとにトランザクション料金が発生すると想定します。アップロード時にファイルサイズを記録し、それをデータベースまたは他の永続ストレージに保存することをお勧めします。

于 2013-09-12T21:23:55.047 に答える