Ich möchte eine Datei asynchron zum Azure-Blobspeicher hochladen. Ich habe die Art und Weise in der offiziellen sdk vorgeschlagen versucht:Laden Sie eine Datei in den Azure-Blobspeicher.
Dies ist, wie ich den Container erhalten:
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;
}
}
Und das ist, wie ich versuche, um die Datei zu laden:
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();
}
}
Das Problem ist, dass ich nicht weiß, wie ich den Pfad zu meiner Datei bekomme (sie wird vom Benutzer hochgeladen).
Wenn ich versuche, dieses:
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);
}
}
Und wenn ich versuche, eine Post-Anforderung. Die Anfrage stürzt ab und gibt nichts zurück (auch keine Ausnahme);
Lösung:
Das Problem wurde in der folgenden Art und Weise gelöst. Ich habe eine Service-Methode verwendet, um eine Sammlung von Dateien hochladen zu können.
In der BlobHelper
Klasse I die benötigten Informationen über den Behälter zu speichern und es dann instanziiert, es ist eine static
Klasse. Mithilfe einer Sammlung können mehrere Dateien als Teil desselben Streams hochgeladen werden.
Ich versuche, die Datei hochzuladen! Indem man seinen Weg erhält. – StefanL19
können Sie bitte teilen Sie arbeiten Code-Snippet für das oben genannte Problem? Danke. – Sampath
Ich werde es als eine Erweiterung der Frage hinzufügen. – StefanL19