【发布时间】:2020-09-10 21:22:50
【问题描述】:
MVC 对每个视频都有一个下载链接:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.NameOfVideo)
</td>
<td>
@Html.ActionLink("Download", "DownloadFile", new {fileName = item.NameOfVideo})
</td>
</tr>
}
索引函数如下所示:
public ViewResult Index()
{
string[] filePaths = Directory.GetFiles(("./wwwroot/Videos/"));
List<Video> files = filePaths.Select(filePath => new Video {NameOfVideo = Path.GetFileName(filePath)}).ToList();
return View(files);
}
我所有的视频都存储在 wwwroot 文件夹中名为 Videos 的文件夹中。
这是下载功能:
public ActionResult DownloadFile(string filename)
{
// Get path with included filename
var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Videos", filename);
byte[]? file = null;
FileInfo fileinfo = new FileInfo(path);
file = System.IO.File.ReadAllBytes(path);
// GetContentType returns corresponding Mimetype
return File(file, GetContentType(path), filename);
}
当我在本地运行它时,一切正常,我可以下载任何大小和类型的视频。 当我在我的 VPS(CentOs 8)上上传发布版本并在那里运行它时,我注意到我仍然可以下载非常小的文件,例如 5000 字节。 当我尝试下载比“失败 - 文件不完整”更大的文件时:
是否存在限制下载最大文件大小的限制? 也是此类应用程序的“DownloadFile”功能最佳方式的代码。我正在尝试制作非常简单的视频数据库供我个人使用,只是为了练习,最大视频大小将保持在 1gb 左右。
更新 1: 我做了一些额外的故障排除,发现了一些有趣的事情。 我首先用
创建了几个文件fsutil file createnew <nameIsFileSizeInBytes> <length>
例如:
fsutil file createnew 500000 500000
这将创建名为 500000 的文件,大小为 500000 字节。
然后我上传了这些文件以在 VPS 上发布构建,结果是:
200000 字节的文件 - 可下载
250000 字节的文件 - 不可下载
300000 字节的文件 - 可下载
350000 字节的文件 - 不可下载
....
所以这里的模式很明显。这达到了 500000 字节的文件大小,之后所有下载都失败了。所以 500000 字节似乎是可以下载的最大值。为了进一步澄清,我添加了下载文件的视频:video of download process(可能需要放大才能看到:D)
谁能指出我应该在哪里寻找这个奇怪问题的根源(我可以从 VPS 下载大文件并通过 ftp 上传)?
更新 2: 通过网络选项卡(chrome)进行了一些故障排除,附上结果图片:
我也使用 nginx,也许配置中有一些东西让我无法下载文件?
Config file of nginx
【问题讨论】:
-
您不需要像那样将所有文件加载到
file- 这会不必要地占用RAM。 docs.microsoft.com/en-us/dotnet/api/…
标签: c# asp.net-mvc nginx video vps