英文:
How to serve millions of image in wwwroot folder using dotnet core 5?
问题
### 背景
我正在使用 dotnet core 5。
我在 wwwroot 文件夹中有数百万张图片。
我将 wwwroot 文件夹添加到 *.csproj 的 DefaultItemExcludes 中。
```xml
<DefaultItemExcludes>$(DefaultItemExcludes);
wwwroot\defectImage\**;
</DefaultItemExcludes>
在开发中运行得很好。
问题
我将其部署到 Linux,并挂载多个外部 NAS 到 wwwroot 文件夹,如下所示:
wwwroot\defectImage
|_projectA
|_projectB
|__20230301
|___0001.jpg
|___0002.jpg
|___0003.jpg
|___...
|__20230302
|__20230303
|__...
|_projectC
...
但在生产环境中,程序初始化非常慢(至少约 20 分钟)。
我该怎么办?
我尝试过的
我尝试移除挂载的文件夹,初始化速度非常快(1 分钟)。
我确认性能问题是因为 wwwroot 中有太多图片。
我还尝试在 Google 和 StackOverflow 上搜索问题,但没有找到解决方案。
代码用法
当前端发送关于图片的 HTTP 请求到我的控制器时,它在 wwwRoot 中查找图片并返回。
例如:
public IActionResult Get(string projectName, string dateTime, string
fileName){
// 将参数组合成生成图像路径
string imgPath = "wwwroot/...";
return File(imgPath, "image/bmp");
// 或返回 PhysicalFile(imgPath, "image/jpg");
}
英文:
background
I am using dotnet core 5.
I have million of image in wwwroot folder.
I add wwwroot folder to DefaultItemExcludes of *.csproj
<DefaultItemExcludes>$(DefaultItemExcludes);
wwwroot\defectImage\**;
</DefaultItemExcludes>
It works great in developing.
Problem
I deploy it to linux with mounting multiple external NAS to wwwroot folder, like below:
wwwroot\defectImage
|_projectA
|_projectB
|__20230301
|___0001.jpg
|___0002.jpg
|___0003.jpg
|___...
|__20230302
|__20230303
|__...
|_projectC
...
But in Production, the program initialize very slow (minimum about 20 mins)
What should I do?
What I have tried
I try to remove the mount folder, and it initialize very quickly (1 min).
I confirm the performance issue is because there are too many image in wwwroot.
I also try search the issue on google and stackOverFlow, and found nothing
Code usage:
when frontend send a http request about a image to my controller, it found the image in wwwRoot and return.
For example:
public IActionResult Get(string projectName, string dateTime, string
fileName){
// combine the parameter to generate img path
string imgPath = "wwwroot/...";
return File(imgPath, "image/bmp");
// or return PhysicalFile(imgPath, "image/jpg");
}
答案1
得分: 1
我使用nginx来提供静态内容,例如图片。使用nginx的rewrite指令来最小化代码的修改。
英文:
I end up using nginx to serve static content, such as images.
Using rewrite directive of nginx to minimize the modification of code.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论