Wie erhalte ich den Stream für eine Multipart-Datei im Webapi-Upload?

Ich muss eine Datei mithilfe von Stream (Azure Blobstorage) hochladen und kann nur nicht herausfinden, wie der Stream vom Objekt selbst abgerufen werden kann. Siehe Code unten.

Ich bin neu in der WebAPI und habe einige Beispiele verwendet. Ich erhalte die Dateien und die archivierten Daten, aber es ist nicht der richtige Typ für meine Methoden, um sie hochzuladen. Daher muss ich es in einen normalen Stream umwandeln, was im Moment etwas schwierig zu sein scheint :)

Ich weiß, dass ich verwenden mussReadAsStreamAsync().Result in gewisser Weise, aber es stürzt in der foreach-Schleife ab, da ich zwei provider.Contents bekomme (erste scheint richtig, zweite nicht).

 [System.Web.Http.HttpPost]
    public async Task<HttpResponseMessage> Upload()
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
        }

        var provider = GetMultipartProvider();
        var result = await Request.Content.ReadAsMultipartAsync(provider);

        // On upload, files are given a generic name like "BodyPart_26d6abe1-3ae1-416a-9429-b35f15e6e5d5"
        // so this is how you can get the original file name
        var originalFileName = GetDeserializedFileName(result.FileData.First());

        // uploadedFileInfo object will give you some additional stuff like file length,
        // creation time, directory name, a few filesystem methods etc..
        var uploadedFileInfo = new FileInfo(result.FileData.First().LocalFileName);



        // Remove this line as well as GetFormData method if you're not
        // sending any form data with your upload request
        var fileUploadObj = GetFormData<UploadDataModel>(result);

        Stream filestream = null;

        using (Stream stream = new MemoryStream())
        {
            foreach (HttpContent content in provider.Contents)
            {
                BinaryFormatter bFormatter = new BinaryFormatter();
                bFormatter.Serialize(stream, content.ReadAsStreamAsync().Result);
                stream.Position = 0;
                filestream = stream;
            }
        }

        var storage = new StorageServices();
        storage.UploadBlob(filestream, originalFileName);**strong text**



private MultipartFormDataStreamProvider GetMultipartProvider()
    {
        var uploadFolder = "~/App_Data/Tmp/FileUploads"; // you could put this to web.config
        var root = HttpContext.Current.Server.MapPath(uploadFolder);
        Directory.CreateDirectory(root);
        return new MultipartFormDataStreamProvider(root);
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage