2016-09-08 46 views
0

如何在api中配置文件流?如何在api中配置文件流?

假設我需要調用這個API 10次。

[HttpGet("{fileName}")] 
public async Task<IActionResult> Get(string fileName) 
{ 
    var res = File.Open(path, FileMode.Open); 
    var file = File(res, "application/zip", fileName); 
    return file; 
} 

我不能在從api方法返回之前處理流。

當我把它稱爲第二次我會得到異常:

該進程無法訪問文件「C:\測試\ example.zip」,因爲它是被另一個進程 。

+0

使用'StreamReader'例如和調用'Close'。順便說一句:應該有'= File(...)'做些什麼?你忘了前面的'new'還是你有一個叫做'File'的方法? – HimBromBeere

+0

沒有新的。它是靜態的。 https://msdn.microsoft.com/en-us/library/b9skfh7s(v=vs.110).aspx – Raskolnikov

+0

我補充了第二行。 – HimBromBeere

回答

1

首先,記住關於併發性和線程安全性。 (許多請求可以同時傳遞給你的控制器,在這種情況下,如果你正在寫文件,那麼應用程序的行爲可能是錯誤的)。 如果不寫入文件(只讀),那麼你可以指定其他線程共享模式是這樣的:

using(var file = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){ 
    //your code goes here 
} 
+0

當使用結束時,比流將處置。如何返回處置流? – Raskolnikov

+0

您可以將文件流複製到此處使用的新流中。看Stream.CopyToAsync [鏈接] https://msdn.microsoft.com/en-us/library/system.io.stream.copytoasync.aspx –

+0

爲什麼你想要返回一個處置的資源? – HimBromBeere

相關問題