2014-10-08 3 views
1

потока Кодя получаю «Этот запрос требует буферизации данных для достижения успеха» исключение при CloudBlockBlob.UploadFromStream из HttpPostedFile

var httpRequest = HttpContext.Current.Request; 
if (httpRequest.Files.Count == 1) 
{ 
    HttpPostedFile file = httpRequest.Files[0]; 

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting(BaseService.BlobConnection)); 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
    CloudBlobContainer container = blobClient.GetContainerReference(documentType.Description); 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 

    blockBlob.Properties.ContentType = file.ContentType; 
    blockBlob.UploadFromStream(file.InputStream, file.ContentLength); 
} 

Я использую два файла, чтобы проверить с первым является DOCX файл, который только 12.3KB и pdf, что составляет 1,47 МБ. Файл docx загружается без проблем, это то, что создает ошибку.

Я нашел только два предмета, которые пытаются объяснить, что происходит, и я действительно не могу сделать из них головы или хвосты. Item 1Item 2

Я смог использовать следующий код, используя данные байта для загрузки без ошибок, но когда я попытался загрузить любой файл, они были повреждены.

var httpRequest = HttpContext.Current.Request; 
if (httpRequest.Files.Count == 1) 
{ 
    HttpPostedFile file = httpRequest.Files[0]; 
    byte[] buffer = null; 
    using (var binaryReader = new BinaryReader(file.InputStream)) 
    { buffer = binaryReader.ReadBytes(file.ContentLength); } 

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting(BaseService.BlobConnection)); 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
    CloudBlobContainer container = blobClient.GetContainerReference(documentType.Description); 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 

    blockBlob.Properties.ContentType = file.ContentType; 
    blockBlob.UploadFromByteArray(buffer, 0, file.ContentLength); 
} 

ОТВЕТИЛ: Проблема была в моей строке подключения хранения я был выбран, чтобы использовать HTTP-соединения вместо HTTPS (рекомендуется по причине). Я не уверен, что это связано с буферизацией, чтобы добиться успеха, но она решила проблему, и теперь я могу хранить загруженные файлы в хранилище blob.

ответ

1

Проблема была в моей строке подключения к хранилищу, которую я выбрал для использования HTTP-соединений вместо HTTPS (рекомендуется по какой-либо причине). Я не уверен, что это связано с буферизацией, чтобы добиться успеха, но она решила проблему, и теперь я могу хранить загруженные файлы в хранилище blob.