2017-10-19 128 views
2

我正在將文件上傳到api,並且我必須將我的requestStream複製到FileStream以便將文件發佈到API。我的代碼如下所示,但我必須將文件保存到臨時文件夾以創建FileStream,然後我必須在操作後再次清理臨時文件夾。有沒有一個更清潔的方式 - 例如在內存中創建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

Frederico,我一直用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

相關問題