0

CloudBlockblob.putBlockandを使用してチャンクでアップロードできることは承知していCloudBlockBlob.PutBlockListますが、これらのメソッドにはリース ID パラメータがありません。

このために、ヘッダーを使用して httpwebrequest を形成し、にアタッチ"x-ms-lease-id"することができますCloudBlockblob.putBlockCloudBlockBlob.PutBlockList


こんにちは Gaurav、私はあなたの応答に大きなコメントができなかったので、それを追加します。

次のコードで BlobRequest.PutBlock と Blobrequest.PutBlock を試しました。

`for (int idxThread = 0; idxThread < numThreads; idxThread++) { tasks.Add(Task.Factory.StartNew(() => { KeyValuePair blockIdAndLength;

                    while (true)
                    {

                        lock (queue)
                        {
                            if (queue.Count == 0)
                                break;

                            blockIdAndLength = queue.Dequeue();
                        }

                        byte[] buff = new byte[blockIdAndLength.Value];

                        //copying chunks into buff from inputbyte array
                        Array.Copy(buffer, blockIdAndLength.Key * (long)blockIdAndLength.Value, buff, 0, blockIdAndLength.Value);


                        // Upload block.
                        string blockName = Convert.ToBase64String(BitConverter.GetBytes(
                            blockIdAndLength.Key));


                             //string blockIdString = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("BlockId{0}", blockIdAndLength.Key.ToString("0000000"))));


                        /// For small files like 100 KB it works files,for large files like 10 MB,it will end up uploading only 2-3 MB
                        /// //Is there any better way to implement Uploading in chunks and leasing.
                        /// 
                             string url = blob.Uri.ToString();
                             if (blob.ServiceClient.Credentials.NeedsTransformUri)
                             {
                                 url = blob.ServiceClient.Credentials.TransformUri(url);
                             }
                             var req = BlobRequest.Put(new Uri(url), 90, new BlobProperties(), BlobType.BlockBlob, leaseId, 0);
                             using (Stream writer = req.GetRequestStream())
                             {
                                 writer.Write(buff,0,buff.Length);
                             }
                             blob.ServiceClient.Credentials.SignRequest(req);
                             req.GetResponse().Close();                                                           

                    }

                }));

            }
            // Wait for all threads to complete uploading data.
            Task.WaitAll(tasks.ToArray());`

これは複数のチャンクでは機能しません.入力を提供してください.

4

1 に答える 1

0

私はあなたができるとは思わない。ただし、 Microsoft.WindowsAzure.StorageClient.Protocol名前空間のBlobRequestクラスを見てください。LeaseIdを指定できるPutBlock関数とPutBlockList関数があります

お役に立てれば。

于 2012-10-11T05:49:59.923 に答える