空のBLOBストレージに.netコアWeb API経由で受け取ったIFormFile
を追加しようとしています。空のBLOBストレージにストリームを追加する
static internal CloudStorageAccount StorageAccount =>
new CloudStorageAccount(new StorageCredentials(AccountName, AccessKey, AccessKeyName), true);
// Create a blob client.
static internal CloudBlobClient BlobClient => StorageAccount.CreateCloudBlobClient();
// Get a reference to a container
static internal CloudBlobContainer Container(string ContainerName)
=> BlobClient.GetContainerReference(ContainerName);
static internal CloudBlobContainer ProfilePicContainer
=> Container(ProfilePicContainerName);
を今私はこのようなProfilePicContainer
を使用します:
var Container = BlobStorage.ProfilePicContainer;
string fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(ProfileImage.FileName);
var blockBlob = Container.GetBlockBlobReference(fileName);
var fileStream = ProfileImage.OpenReadStream();
fileStream.Position = 0;
await blockBlob.UploadFromStreamAsync(fileStream);
これは私に次のエラーを与える:
Microsoft.WindowsAzure.Storage.StorageException: 'Cannot access a closed Stream.'
Inner Exception ObjectDisposedException: Cannot access a closed Stream.
デバッグするとき、私はこれらは私が設定したプロパティですfileStream.Position = 0
の位置はすでに0であることに気づいた。しかし、私はこのエラーが発生してから行を追加した。また、待ち受けラインでは、fileStream
の_disposed
はfalseに設定されています。
また、BLOB接続に関しては、文字列定数AccessKey
の無効な値を設定しようとしましたが、まったく同じエラーが表示されます。つまり、接続さえすればいいのかどうかわかりません。私はblobBlock
内のすべての値をデバッガでチェックしましたが、接続されているかどうかを確認する方法はわかりません。
以上の修正だった 'fileStream'はすでになく、AzureストレージSDKの問題を閉じているように聞こえますか?あなたは 'fileStream'ストリームにまったくアクセスできますか? '(var testStream = File.OpenWrite(Path.GetTempFileName()))fileStream.CopyTo(testStream)'を使ってディスクに書き込めますか? –
はい、ファイルに書き込み、バイトに書き込むためにfileStreamを試しました。どちらもうまく動作します。 –
ブロックを使用してストリームを入れてみてください。 –