在MVC网站

时间:2017-07-21 13:01:35

标签: asp.net-mvc web-services web

我正在开发一个Web服务(使用ASP.NET MVC),我需要显示两个视频。这两个视频会定期更新。

MVC项目中使用的模型只是存储视频的路径(在模型中使用视频文件会更好吗?)。

我预计,在更改视频文件(新的.mp4文件,保留旧路径)并重新加载后,视频会发生变化,但事实并非如此。

如何更新我的视频?到目前为止,我尝试使用" load()"创建HTML函数,类似于in this link,但它不起作用。 (另外我不确定这对我来说是一个很好的解决方案,因为我需要强制从控制器进行更新。)

谢谢!

编辑:根据评论中的要求添加一些代码。

模型(是的,名称是旧的,我会将其更改为"视频"):

public class Picture
{
    public int PictureID { get; set; }
    public string FilePath { get; set; }
    public string PicName { get; set; }
    public int Xsize { get; set; }
    public int Ysize { get; set; }

    public Picture()
    {
        FilePath = "../../VideoDatabase/";
        PicName = "Default";
        Xsize = 320;
        Ysize = 200;
    }

    public void LinkNameAndPath()
    {
        FilePath = "../../VideoDatabase/" + PicName + ".mp4";
    }
}

在控制器中,创建模型对象:

    Picture CreateDefault(string pictureName)
    {
        Picture picture = new Picture();
        picture.FilePath += "Candidates/" + pictureName + ".mp4";
        picture.PicName = pictureName;
        return picture;
    }

在控制器中,调用视图:

    public ActionResult Index()
    {            
        if (candidates.Count != 2)
        {
            return RedirectToAction("UnexpectedError");
        }
        else
        {
            return View(candidates);
        }
    }

在视图中,视频对象:

        <video id="candidate0video" width="432" height="240" controls autoplay loop>
            <source src=@Model[0].FilePath type="video/mp4">
            Your browser does not support the video tag.
        </video>

2 个答案:

答案 0 :(得分:0)

您可能希望首先调试视图模型。这样,您就可以判断视图模型是否获得了正确的值。如果文件路径未正确更新,那么显然视频将无法在页面上显示。

您可能也应该检查这些事情

  • pictureName参数是否成功传递?
  • 方法LinkNameAndPath()怎么样?实际上它是否被调用了?

更新

public ActionResult Index()
{
    var path = HostingEnvironment.MapPath("[Your file path]");
    HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=[your file name].mp4");
    var objFile = new FileInfo(path);
    var stream = objFile.OpenRead();
    var objBytes = new byte[stream.Length];
    stream.Read(objBytes, 0, (int)objFile.Length);
    HttpContext.Response.BinaryWrite(objBytes);
}

<video id="candidate0video" width="432" height="240" controls autoplay loop>
   <source src=@Url.Action("Index","[your controller name]") type="video/mp4">
   <!-- or try the following -->
   <!-- <source src=@Url.Content(Model[0].FilePath) type="video/mp4"> -->
   Your browser does not support the video tag.
</video>

答案 1 :(得分:0)

我的一位朋友提供了有用的洞察力。我在这里翻译(并改编)他所说的内容,这是我解决问题的基础(基本上通过为更新的文件使用新名称来解决):

这很复杂。第一次下载资产时,服务器会添加一个HTTP“Cache-control”标头,告诉客户端在某个给定时间内本地缓存该文件。

您的想法是希望活动缓存减少服务器上的负载。 (也许在开发环境中,停用缓存是有意义的。)

典型的解决方案是自动添加文件内容的哈希值来更改文件的名称。这样,如果您有文本文件(CSS / JS),客户端将在您更新内容时下载新版本。

我建议你寻找一个自动管理的图书馆(假设视频是通过你的应用程序上传的,而不是直接使用FTP)。