我收到"此请求要求缓冲数据成功"来自HttpPostedFile的CloudBlockBlob.UploadFromStream异常

时间:2014-10-08 19:09:45

标签: azure-storage-blobs 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.47MB。 docx文件上传没有问题,pdf是产生错误的原因。

我只找到了两个试图解释发生了什么的事情,我真的不能用它们做出正面或反面。 Item 1& Item 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);
}

ANSWERED: 问题出在我的存储连接字符串中,我选择使用HTTP连接而不是HTTPS(出于某种原因推荐使用它)。我不确定与缓冲成功有什么关系,但它解决了这个问题,我现在能够将上传的文件存储到blob存储中。

1 个答案:

答案 0 :(得分:2)

问题出在我的存储连接字符串中,我选择使用HTTP连接而不是HTTPS(出于某种原因推荐使用它)。我不确定与缓冲成功有什么关系,但它解决了问题,我现在能够将上传的文件存储到blob存储中。