Esempio n. 1
0
        public static void UploadTextAPM(CloudBlob blob, string text, Encoding encoding, AccessCondition accessCondition = null, BlobRequestOptions options = null, OperationContext operationContext = null)
        {
            byte[] textAsBytes = encoding.GetBytes(text);
            using (MemoryStream stream = new MemoryStream())
            {
                stream.Write(textAsBytes, 0, textAsBytes.Length);
                if (blob.BlobType == BlobType.PageBlob)
                {
                    int lastPageSize = (int)(stream.Length % 512);
                    if (lastPageSize != 0)
                    {
                        byte[] padding = new byte[512 - lastPageSize];
                        stream.Write(padding, 0, padding.Length);
                    }
                }

                stream.Seek(0, SeekOrigin.Begin);
                blob.ServiceClient.DefaultRequestOptions.ParallelOperationThreadCount = 2;

                using (AutoResetEvent waitHandle = new AutoResetEvent(false))
                {
                    if (blob.BlobType == BlobType.AppendBlob)
                    {
                        CloudAppendBlob blob1 = blob as CloudAppendBlob;

                        IAsyncResult result = blob1.BeginCreateOrReplace(
                            ar => waitHandle.Set(),
                            null);
                        waitHandle.WaitOne();
                        blob1.EndCreateOrReplace(result);

                        result = blob1.BeginAppendBlock(stream, null,
                                                        ar => waitHandle.Set(),
                                                        null);
                        waitHandle.WaitOne();
                        blob1.EndAppendBlock(result);
                    }
                    else if (blob.BlobType == BlobType.PageBlob)
                    {
                        CloudPageBlob pageBlob = blob as CloudPageBlob;
                        IAsyncResult  result   = pageBlob.BeginUploadFromStream(stream, accessCondition, options, operationContext,
                                                                                ar => waitHandle.Set(),
                                                                                null);
                        waitHandle.WaitOne();
                        pageBlob.EndUploadFromStream(result);
                    }
                    else
                    {
                        CloudBlockBlob blockBlob = blob as CloudBlockBlob;
                        IAsyncResult   result    = blockBlob.BeginUploadFromStream(stream, accessCondition, options, operationContext,
                                                                                   ar => waitHandle.Set(),
                                                                                   null);
                        waitHandle.WaitOne();
                        blockBlob.EndUploadFromStream(result);
                    }
                }
            }
        }