![](/img/trans.png)
[英]Static file not served through IIS but serving through localhost - ASP.NET Core 3.1 MVC & C#
[英]ASP.NET Core 3.1 MVC download file not found until IIS app pool recycle or run website from localhost
我正在運行 IIS 10 的 Microsoft 服務器上使用 Entity Framework 網站制作一個 ASP.NET Core 3.1 MVC,具有基本的用戶文件上傳和下載功能。 我可以將文件從 web 上傳到 _webHostEnvironment.WebRootPath,但是當我嘗試下載它們時找不到它們。 但是,如果我回收應用程序池,我可以下載該文件(我也可以在訪問服務器本地主機上的網站后從 web 下載它)。
這是我上傳文件時的代碼:
string uniqueFileName = null;
if (model.Data != null)
{
string uploadsFolder = Path.Combine(_webHostEnvironment.WebRootPath, "images");
uniqueFileName = Guid.NewGuid().ToString() + "_" + model.Data.FileName;
string filePath = Path.Combine(uploadsFolder, uniqueFileName);
model.Data.CopyTo(new FileStream(filePath, FileMode.Create));
}
這是我下載時的代碼:
public FileResult DownloadData(string fileName, string tempAddCode, string patientName)
{
byte[] fileBytes = System.IO.File.ReadAllBytes(Path.Combine(_webHostEnvironment.WebRootPath, "images") + "\\" + fileName);
var dataStream = new MemoryStream(fileBytes);
return new FileStreamResult(dataStream, new MediaTypeHeaderValue("application/pdf"))
{
FileDownloadName = patientName.ToLower().Replace(" ", "_") + ".pdf"
};
}
到底是怎么回事? 為什么回收應用程序池可以解決這個問題? 我是否將這些用戶上傳的文件保存到錯誤的位置,而 ASP.NET 正在做某種緩存操作? 我很樂意幫助您找到解決方案。 謝謝。
如果在 DownloadData function 中放置斷點並單步執行,會發生什么情況? 它是否成功將文件讀入 fileBytes,或者您是否遇到異常 - 您遇到了什么異常? 請同時檢查 IIS 日志以獲取錯誤代碼並發布。
此外,請確保您正在運行的用戶對該文件夾具有寫入權限。 默認情況下,它不會。
要添加,請右鍵單擊文件夾、安全性,然后添加(從計算機)IIS AppPool\ [無論 appPool 名稱是什么]。
IIS AppPool\MyAppPool
使用這一行,您可以打開文件 stream 並且永遠不會關閉它。
model.Data.CopyTo(new FileStream(filePath, FileMode.Create));
確保你總是處理你的流,這樣文件就不會保持鎖定狀態。 使用下面的代碼將 stream 正確復制到文件
using (var fs = new FileStream(filePath, FileMode.Create))
{
model.Data.CopyTo(fs);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.