流代码
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 存储中。