2

全体として、 Form に File html 要素を含む Web ページに大きなファイル (700MB) をアップロードしようとしていました。サーバー側でストリームを取得し、それを Azure ストレージにアップロードできるようにしたいと考えています。サーバー側のコード スニペットを次に示します。

public void UploadFile()
{
    Stream source = Request.InputStream; 
    
    long copiedByteCount = 0;

    byte[] buffer = new byte[2 * 1024];
    
    for (int len; (len = from.Read(buffer, 0, buffer.Length)) > 0; )
    {
        //Begin to write buffer to Azure.
        ....(I am still searching the BlockBlob code sample in google.)
        //
        copiedByteCount += len;
    }
   
}

私の質問は

1.アプリがすべてのメモリを消費しないことを願っているので、ストリームをブロックごとに読み取ります。希望通りかどうかはわかりません。

2.すべてのバッファブロックをBlockBlobに並列に書き込む方法の例を教えてください。

ありがとう。

4

1 に答える 1

2

まず、700MB のアップロードを許可するには、web.config でこれを許可する必要があることを知っておく必要があります。

<system.web>
  <httpRuntime executionTimeout="240" maxRequestLength="716800" />
</system.web>

<system.webServer> 
    <security> 
        <requestFiltering>
            <requestLimits maxAllowedContentLength="716800" /> 
        </requestFiltering> 
    </security> 
</system.webServer>

誰かが 256KB を超えるファイルをアップロードすると (これがデフォルトです)、ファイルはディスクにバッファリングされます (ここに記載されています)。そのため、着信ファイルについて心配する必要はありません。

このファイルをメモリに読み込まずに BLOB にアップロードするには、単純に HttpPostedFile のストリームを使用して、それをストレージ クライアントに転送します。

 var blob = container.GetBlockBlobReference(blobName);
 blob.UploadFromStream(Request.Files[0].InputStream);

最後に、BLOB を並行してアップロードする場合は、このページのコードから開始できます: BLOB の並行アップロードとダウンロード(ファイル名ではなくストリームを受け入れるようにUploadFileToBlobAsyncメソッドを変更する必要があります)。

于 2012-09-23T09:27:51.410 に答える