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

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");
}
1个回答

2
您的假设是正确的,它也返回一个JSON字符串,其中包含名称、内容类型和长度。这无疑是一种异步上传。
通常最好将文件存储在磁盘上而不是使用数据库。原因如下:
- 没有额外开销。通过文件系统加载比通过连接到(可能不在本地的)数据库更快。 - 大对象分配最小化:在上传期间已经创建了一个大对象。如果您要转换为字节数组,则在内存中又创建了另一个大对象。
您可能希望使用数据库进行自定义版本控制或跟踪文件(通过额外的元数据等)。但是,这通常也可以使用文件系统完成。

那么将视频保存在app_data文件夹中是否可以呢?因为那是一个基于文件的文件夹,适合用于SQL。 - TMan
其实没有一个标准的地方来做这些事情...但是如果上传的文件会变得失控,我通常会避免使用app_data文件夹。在这种情况下,请使用不同的文件夹,并适当地组织文件夹结构。 - Simon Whitehead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接