我想异步上传文件到Azure blob存储。我曾尝试在官方SDK建议的方式:将文件上传到Azure Blob存储
这是我得到的容器:
public static class BlobHelper
{
public static CloudBlobContainer GetBlobContainer()
{
// Pull these from config
var blobStorageConnectionString = ConfigurationManager.AppSettings["BlobStorageConnectionString"];
var blobStorageContainerName = ConfigurationManager.AppSettings["BlobStorageContainerName"];
// Create blob client and return reference to the container
var blobStorageAccount = CloudStorageAccount.Parse(blobStorageConnectionString);
var blobClient = blobStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(blobStorageContainerName);
container.CreateIfNotExists();
container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
return container;
}
}
而且这是我尝试上传的文件:
var documentName = Guid.NewGuid().ToString();
CloudBlobContainer container = BlobHelper.GetBlobContainer();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(documentName);
public class FilesService
{
public async Task<string> UploadFiles(HttpContent httpContent)
{
var documentName = Guid.NewGuid().ToString();
CloudBlobContainer container = BlobHelper.GetBlobContainer();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(documentName);
using (var fileStream = System.IO.File.OpenRead(@"path\myfile"))
{
await blockBlob.UploadFromStreamAsync(fileStream);
}
return blockBlob.Uri.ToString();
}
}
问题是我不知道如何获取我的文件的路径(它由用户上传)。
当我试试这个:
var rootpath = HttpContext.Current.Server.MapPath("~/App_Data");
var streamProvider = new MultipartFileStreamProvider(rootpath);
await httpContent.ReadAsMultipartAsync(streamProvider);
foreach (var file in streamProvider.FileData)
{
var localName = file.LocalFileName;
using (var fileStream = System.IO.File.OpenRead(file.LocalFileName))
{
await blockBlob.UploadFromStreamAsync(fileStream);
}
}
,当我尝试POST请求。请求只是崩溃,不会返回任何东西(甚至是一个例外);
解决方案:
这个问题是通过以下方式解决。我使用了一种服务方法,以便能够上传一组文件。
在BlobHelper
I类保存有关容器所需的信息,然后实例,它是一个static
类。使用集合可以将多个文件作为同一个流的一部分进行上传。
我想上传文件!通过获得它的路径。 – StefanL19
可以请你分享你的工作代码片段的上述问题?谢谢。 – Sampath
我会将其添加为该问题的扩展。 – StefanL19