我有一個控制器,它有一個函數將返回一個文件。該文件作爲臨時文件在服務器上生成,然後通過HttpResponseMessage
進行流式傳輸。我想要做的是在完成發送後刪除文件(也許將來我們可能會保留它們一段時間,以防再次發出完全相同的請求)。我有這樣的事情:返回文件流 - 如何知道它什麼時候完成
[HttpGet]
public HttpResponseMessage GetReport()
{
string fileName = //function that creates the file and returns the filename...
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StreamContent(new FileStream(fileName, FileMode.Open, FileAccess.Read));
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "test.docx";
//File.Delete(fileName);
return response;
}
我不能刪除上面註釋掉的文件,因爲這個文件正在使用。那麼是否有一個事件或一旦流完成發送後會被觸發,所以我可以處理刪除?
當然,我可以開始一個任務,等待一段時間然後刪除,但這看起來有點不可思議。
我建議你創建一個方法,接收文件句柄或其他方式來識別文件,要做到這一點,而且這種方法將在客戶端被調用時,它會是好的刪除文件 –
@RicardoAppleton:我聽到你在說什麼,但是這留給了客戶端,這也使得我可以通過請求一大堆文件而不用發送刪除消息來使服務器崩潰,直到磁盤用完空間。當然,我仍然需要控制。 –