1

Blobrequest.PutBlock(Uri uri、int timeout、string blockid、string Leaseid);を作成する方法を知りたいです。

ユーザーが100MBのような大きなファイルをアップロードしようとすると、iはそれらをメモリ内の4MBごとにチャンクに分割します(4 MBのデータをバイト[]に読み取ります)。

着信ファイルストリームをチャンクに分割し、BlobRequest.PutBlockとBlobRequest.PutBlockListを使用してblobにアップロードする方法。これは、blobに関連付けられたリースがあるためです。これは、ファイルを分割し、利用可能なAzureでリースIDを持つチャンクをアップロードする必要がある場合に推測する唯一のオプションです。 SDK 1.7.0

よろしく、Vivek

4

2 に答える 2

1

PutBlockを呼び出すときに、最後のパラメーターとしてleaseIdを渡すだけです。

public static HttpWebRequest PutBlock (
    Uri uri,
    int timeout,
    string blockId,
    string leaseId
)

CloudBlobを使用している場合、URLの作成は非常に簡単です(詳細については、Steveのブログ投稿を参照してください)。

var creds = blob.ServiceClient.Credentials;
var transformedUri = new Uri(creds.TransformUri(blob.Uri.ToString()));
BlobRequest.PutBlock(transformedUri, ...)
于 2012-10-10T12:04:07.773 に答える
0

このリンクは、ブロック内のazure blobへのファイルのアップロードを調査するのに役立ちます:
http ://wely-lau.net/2012/02/26/uploading-big-files-in-windows-azure-blob-storage-with- putlistblock /
外部の依存関係を削除するために、ここにコードをコピーしています。

 protected void btnUpload_Click(object sender, EventArgs e)
{
    CloudBlobClient blobClient;
    var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    blobClient = storageAccount.CreateCloudBlobClient();

    CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
    container.CreateIfNotExist();

    var permission = container.GetPermissions();
    permission.PublicAccess = BlobContainerPublicAccessType.Container;
    container.SetPermissions(permission);

    string name = fu.FileName;
    CloudBlockBlob blob = container.GetBlockBlobReference(name);

    blob.UploadFromStream(fu.FileContent);

    int maxSize = 1 * 1024 * 1024; // 4 MB

    if (fu.PostedFile.ContentLength > maxSize)
    {
        byte[] data = fu.FileBytes; 
        int id = 0;
        int byteslength = data.Length;
        int bytesread = 0;
        int index = 0;
        List<string> blocklist = new List<string>();
        int numBytesPerChunk = 250 * 1024; //250KB per block

        do
        {
            byte[] buffer = new byte[numBytesPerChunk];
            int limit = index + numBytesPerChunk;
            for (int loops = 0; index < limit; index++)
            {
                buffer[loops] = data[index];
                loops++;
            }
            bytesread = index;
            string blockIdBase64 = Convert.ToBase64String(System.BitConverter.GetBytes(id));

            using (var ms = new MemoryStream(buffer, true))
              blob.PutBlock(blockIdBase64, ms, null);

ヌル); blocklist.Add(blockIdBase64); id ++; } while(byteslength-bytesread> numBytesPerChunk);

        int final = byteslength - bytesread;
        byte[] finalbuffer = new byte[final];
        for (int loops = 0; index < byteslength; index++)
        {
            finalbuffer[loops] = data[index];
            loops++;
        }
        string blockId = Convert.ToBase64String(System.BitConverter.GetBytes(id));
        using (var ms = new MemoryStream(finalbuffer, true))
          blob.PutBlock(blockId, ms, null);
        blocklist.Add(blockId);

        blob.PutBlockList(blocklist); 
    }
    else
        blob.UploadFromStream(fu.FileContent);            
}

大きなファイルのアップロード用にSteveMarxによって開発されたSilverlightコントロール(たとえば)もここにあります。

于 2012-10-10T12:23:16.897 に答える