1

流代码

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);
}

我正在使用两个文件进行测试,第一个是一个只有 12.3KB 的 docx 文件和一个 1.47MB 的 pdf。docx 文件上传没有问题,pdf 是产生错误的原因。

我只找到了两个试图解释正在发生的事情的项目,我真的无法从中做出正面或反面。第 1项和第 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 存储中。

4

1 回答 1

2

问题出在我的存储连接字符串中,我选择了使用 HTTP 连接而不是 HTTPS(建议这样做是有原因的)。我不确定这与缓冲成功有什么关系,但它解决了这个问题,我现在可以将上传的文件存储到 blob 存储中。

于 2014-10-08T20:31:31.853 回答