2017-10-19 6 views
2

ファイルをapiにアップロードしています。ファイルをAPIに送信するためにrequestStreamをFileStreamにコピーする必要があります。私のコードは動作しますが、FileStreamを作成するために一時フォルダにファイルを保存しなければなりません。その後、操作の後でtempフォルダをもう一度クリーンアップする必要があります。それを行うためのクリーンな方法がありますか?それをディスクに保存するのではなく、メモリにFileStreamを作成します(可能な場合)。ディスクに物理ファイルを保存するのではなく、メモリにFileStreamを作成します。

Stream requestStream = await Request.Content.ReadAsStreamAsync(); 

    //Create filestream by making a temporary physical file 
    using (FileStream fileStream = System.IO.File.Create(@"C:\tempFolder\" fileName))          
    { 
     await requestStream.CopyToAsync(fileStream); 
     var postedFile = ms.CreateMedia(fileName, folder.Id, "file");          
     postedFile.SetValue("umbracoFile", fileName, fileStream);          
     ms.Save(postedFile); 
    } 

    // Clean up 
    if ((System.IO.File.Exists(@"C:\tempFolder\" + fileName))) 
    { 
     System.IO.File.Delete(@"C:\tempFolder\" + fileName); 
    } 
+4

あなたは['MemoryStream'](https://msdn.microsoft.com/en-us/library/system.io.memorystream)を探しています。 –

+0

フレデリコ、私はMemoryStreamのアプローチに困惑していました。私はそれを動作させることができませんでしたので、これをやりました。 – micknt

答えて

0

なぜrequestStreamを直接使用しないのですか? Streamのインスタンスで、APIのエンドポイントにはStreamのインスタンスが必要であるため、不要なオーバーヘッドを追加しない限り、requestStreamのコンテンツを任意の中間ポイントにコピーする必要はありません。

Stream requestStream = await Request.Content.ReadAsStreamAsync(); 

var postedFile = ms.CreateMedia(fileName, folder.Id, "file"); 
postedFile.SetValue("umbracoFile", fileName, requestStream); 
ms.Save(postedFile); 
+0

うわー、それは私が作っていた迂回より簡単でした...ありがとう、それは動作します!私がそれを知らないなら、私はrequestStreamからファイル名を抽出できますか? – micknt

+0

@micknt - 'requestStream'インスタンスからではありませんが、' Request'や 'Request.Content'のヘッダーから取得できるかもしれません。あなたはデバッグ時にそれを調べなければならないか、もしそれが含まれていれば発信者がファイル名をどのように送信しているかを見なければならないでしょう。 – Igor

+0

@Igorありがとうございます、私はその情報の要求を調べてみます。 – micknt

関連する問題