3

我以前从未尝试过保存视频,所以我对此了解不多。我知道如果视频很小,我可以转换为字节数组并保存到数据库,但是为了提高效率,我想学习如何将任何上传的视频保存到我的服务器文件,然后只保存文件路径我的数据库表中的视频。我完全不知道如何开始这样做。我在下面看到了这个例子,但不太确定它在做什么。对我来说,它似乎正在保存任何用户上传到 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");
}
4

1 回答 1

2

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

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

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

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

于 2012-12-09T23:16:30.667 回答