Ich versuche, eine IFormFile
über eine .net Core-Web-API zu einem azure Blob-Speicher hinzugefügt. Dies sind die Eigenschaften Ich habe ein:Hinzufügen zu azurblauen Blob Speicher mit Stream
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);
Jetzt benutze ich die ProfilePicContainer
wie folgt aus:
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);
Das gibt mir die folgende Fehlermeldung:
Microsoft.WindowsAzure.Storage.StorageException: 'Cannot access a closed Stream.'
Inner Exception ObjectDisposedException: Cannot access a closed Stream.
Wenn das Debuggen, ich habe bemerkt, noch bevor fileStream.Position = 0
es ist Position ist bereits 0. Allerdings habe ich die Zeile seit ich diesen Fehler bekam. Ebenfalls auf der Wartezeile ist die fileStream
_disposed
auf false gesetzt.
Darüber hinaus habe ich in Bezug auf die Blob-Verbindung versucht, einen ungültigen Wert für die Zeichenfolge Konstante AccessKey
und es zeigt genau den gleichen Fehler. Was bedeutet, dass ich keine Ahnung habe, ob es sogar eine Verbindung gibt. Ich habe alle Werte innerhalb blobBlock
im Debugger überprüft, aber ich habe keine Ahnung, wie man überprüft, ob es verbunden ist.
Es klingt wie 'fileStream' bereits geschlossen ist und nicht ein Problem mit dem Azure-Speicher sdk? Können Sie überhaupt auf den Stream "fileStream" zugreifen? Kann man es mit etwas wie 'using (var testStream = Datei.OpenWrite (Path.GetTempFileName())) auf die Festplatte schreiben? FileStream.CopyTo (testStream)'? –
ja habe versucht den FileStream in die Datei zu schreiben und in Bytes zu schreiben. beides funktioniert gut. –
Versuchen Sie, den Stream in einen Block –