سؤال

أنا أكتب رمزًا لتحميل الملفات الكبيرة في النقط باستخدام الكتل ... عندما اختبرته ، أعطاني storageClientException

وذكر: أحد مدخلات الطلب خارج النطاق.

حصلت على هذا استثناء في هذا السطر من الكود:

blob.PutBlock(block, ms, null);

ها هو رمزتي:

protected void ButUploadBlocks_click(object sender, EventArgs e)
        {

            // store upladed file as a blob storage
            if (uplFileUpload.HasFile)
            {
                name = uplFileUpload.FileName;
                byte[] byteArray = uplFileUpload.FileBytes;
                Int64 contentLength = byteArray.Length;
                int numBytesPerBlock = 250 *1024; // 250KB per block
                int blocksCount = (int)Math.Ceiling((double)contentLength / numBytesPerBlock);  // number of blocks 
                MemoryStream ms ;
                List<string>BlockIds = new List<string>();
                string block;
                int offset = 0;

                // get refernce to the cloud blob container
                CloudBlobContainer blobContainer = cloudBlobClient.GetContainerReference("documents");

                // set the name for the uploading files
                string UploadDocName = name;

                // get the blob reference and set the metadata properties
                CloudBlockBlob blob = blobContainer.GetBlockBlobReference(UploadDocName);
                blob.Properties.ContentType = uplFileUpload.PostedFile.ContentType;

                for (int i = 0; i < blocksCount; i++, offset = offset + numBytesPerBlock)
                {
                    block = Convert.ToBase64String(BitConverter.GetBytes(i));
                    ms = new MemoryStream();
                    ms.Write(byteArray, offset, numBytesPerBlock);

                    blob.PutBlock(block, ms, null);
                    BlockIds.Add(block);
                }

                blob.PutBlockList(BlockIds);

                blob.Metadata["FILETYPE"] = "text";
            }
        }

هل يمكن لأي شخص أن يخبرني كيف أحلها ...

هل كانت مفيدة؟

المحلول

أعتقد أنه يتعين عليك القيام بـ Ms.Position = 0 لإعادة الدفق إلى البداية قبل تحميله. (وإلا ، من المفترض أن يحاول PutBlock القراءة من الدفق ويجدها بالفعل في النهاية.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top