ファイルを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);
}
}
をそして私はポストの要求をしようとします。リクエストはクラッシュし、何も返されません(例外でさえも)。
ソリューション:
問題は次のように解決されました。私は、ファイルのコレクションをアップロードできるようにサービスメソッドを使用しました。私はコンテナに関する必要な情報を保存し、それをインスタンス化BlobHelper
クラスで
、それはstatic
クラスです。コレクションを使用すると、複数のファイルを同じストリームの一部としてアップロードすることができます。
ファイルをアップロードしようとしています。そのパスを取得する。 – StefanL19
上記の問題のために作業コードスニペットを教えていただけますか?ありがとうございます。 – Sampath
質問の延長として追加します。 – StefanL19