一樣概述之前遇到的問題然後筆記一下,在 ASP.Net Core 中靜態的東西都會放在 wwwroot 下面基本上大家都知道
之後我會用程式動態產生一些資料對方下載或是網站呈現需要用到,大部分的檔案都會沒事,但是就遇到了 7z 不能下載
當然在IIS 下我可以調整透過 Web.Config 設定,但是如果不是呢?

今天這案例就是在 ASP.NET Core 6 下添加 .7z 運許被下載
1. 將 Program.cs 中的 app.UseStaticFiles() 改成如下
Program.cs
public static void Main(string[] args)
{
//-- 省略
var provider = new Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider();
provider.Mappings.Add(new KeyValuePair(".7z", "application/x-7z-compressed"));
app.UseStaticFiles(new StaticFileOptions()
{
ContentTypeProvider = provider
});
//-- 省略
}
2.測試一下,這邊我就是先在 wwwroot 下建立一個 Downloads 檔案夾,並且我複製一個 已存在的 sample1.7z 過去,並改名為 sample.7z
程式碼如下:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Core6Tutorial.Pages
{
public class Copy7zFile2DownloadDirModel : PageModel
{
public string Result { get; set; }
private IWebHostEnvironment Environment;
public CreateCSVDownloadModel(IWebHostEnvironment _environment)
{
Environment = _environment;
}
public void OnGet()
{
string wwwPath = Environment.WebRootPath;
string downloadPath = Path.Combine(this.Environment.WebRootPath, "Downloads");
//嘗試建立一個 Download 檔案夾在 wwwroot 下面
Directory.CreateDirectory(downloadPath);
//Copy an 7z
System.IO.File.Copy(AppDomain.CurrentDomain.BaseDirectory + "sample1.7z", downloadPath + Path.DirectorySeparatorChar + "sample.7z",true);
}
}
}
這樣你就可以透過你運行的路徑 本案例為: https://localhost:7027/Downloads/smaple.7z
他就不會發生 404 檔案不存在的問題
就記錄到這吧 Happy Coding.
reference:
https://github.com/dotnet/aspnetcore/blob/v2.2.1/src/Middleware/StaticFiles/src/FileExtensionContentTypeProvider.cs
https://thechrisgreen.com/2022/05/add-a-mime-type-to-an-asp-net-core-net-6-app/