将video上传/保存到数据库或文件系统

我之前从未尝试过保存video,因此我对此并不了解。 我知道如果video很小我可以转换为字节数组并保存到数据库,但为了更高效我想学习如何将任何上传的video保存到我的服务器文件,然后只保存文件的路径我的数据库表中的video。 我完全不知道如何开始这样做。 我在下面看过这个例子,但不太清楚它在做什么。 对我来说,似乎它保存了任何用户上传到App_Data文件夹的任何上传video。 是对的吗? 任何帮助是极大的赞赏。

[HttpPost] public ContentResult UploadFiles() { var r = new List(); foreach (string file in Request.Files) { HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; if (hpf.ContentLength == 0) continue; string savedFileName = Path.Combine(Server.MapPath("~/App_Data"), Path.GetFileName(hpf.FileName)); hpf.SaveAs(savedFileName); // Save the file r.Add(new ViewDataUploadFilesResult() { Name = hpf.FileName, Length = hpf.ContentLength, Type = hpf.ContentType }); } // Returns json return Content("{\"name\":\"" + r[0].Name + "\",\"type\":\"" + r[0].Type + "\",\"size\":\"" + string.Format("{0} bytes", r[0].Length) + "\"}", "application/json"); } 

您的假设是正确的..它还返回一个名称,内容类型和长度的JSON字符串。 这无疑是异步上传。

通常最好将文件存储在磁盘上而不是使用数据库。 有几个原因:

  • 减少开销。 通过文件系统加载比通过(可能非本地)数据库连接更快。
  • 大对象分配是最小的:在上载期间已经创建了一个大对象。 如果要转换为字节数组,则在内存中创建另一个大对象。

您可能想要使用数据库的一个原因是自定义版本控制或保持正确的文件跟踪(通过额外的元数据等)。 但是,这通常也可以使用文件系统来完成。