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

时间:2012-12-09 23:10:50

标签: c# asp.net-mvc file-upload asp.net-mvc-4 video-streaming

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

[HttpPost]
public ContentResult UploadFiles()
{
       var r = new List<ViewDataUploadFilesResult>();

       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");
}

1 个答案:

答案 0 :(得分:2)

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

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

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

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