【问题标题】:Uploading/Saving videos to database or file system上传/保存视频到数据库或文件系统
【发布时间】:2012-11-27 09:19:33
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 那么将视频保存在 app_data 文件夹中是否可以,因为这是一个基于文件的 sql 文件夹?
    • 实际上并没有一个标准的地方来做事。但如果上传的文件会失控,我通常会避免使用 app_data 文件夹。在这种情况下使用不同的文件夹..并正确组织文件夹结构。
    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多