Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC网站中新源文件后重新加载视频_Asp.net Mvc_Web Services_Web - Fatal编程技术网

Asp.net mvc 在MVC网站中新源文件后重新加载视频

Asp.net mvc 在MVC网站中新源文件后重新加载视频,asp.net-mvc,web-services,web,Asp.net Mvc,Web Services,Web,我正在开发一个web服务(使用ASP.NET MVC),在这里我需要显示两个视频。这两个视频会定期更新 MVC项目中使用的模型只存储视频的路径(在模型中包含视频文件是否更好?) 我原以为,在更改视频文件(新的.mp4文件,保留旧路径)并重新加载后,视频会更改,但事实并非如此 如何更新我的视频?到目前为止,我已经尝试使用“load()”创建一个HTML函数,类似于,但它不起作用。(我也不确定这对我来说是否是一个好的解决方案,因为我需要从控制器强制更新。) 谢谢大家! 编辑:根据注释中的要求添加一些

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

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

我原以为,在更改视频文件(新的.mp4文件,保留旧路径)并重新加载后,视频会更改,但事实并非如此

如何更新我的视频?到目前为止,我已经尝试使用“load()”创建一个HTML函数,类似于,但它不起作用。(我也不确定这对我来说是否是一个好的解决方案,因为我需要从控制器强制更新。)

谢谢大家!

编辑:根据注释中的要求添加一些代码

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

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

    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>

您的浏览器不支持视频标记。

您可能需要先调试视图模型。这样,您就可以判断视图模型是否获得了正确的值。如果文件路径没有正确更新,那么视频显然不会显示在页面上

你可能也应该检查一下这些东西

  • 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>
public ActionResult Index()
{
var path=HostingEnvironment.MapPath(“[您的文件路径]”);
HttpContext.Response.AddHeader(“内容处置”、“附件;文件名=[您的文件名].mp4”);
var objFile=新文件信息(路径);
var stream=objFile.OpenRead();
var objBytes=新字节[stream.Length];
Read(objBytes,0,(int)objFile.Length);
HttpContext.Response.BinaryWrite(对象字节);
}
您的浏览器不支持视频标记。

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

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

这样做的目的是希望使用活动缓存来减少服务器上的负载。(可能在开发环境中,停用缓存是有意义的。)

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


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

也许你需要
Ctrl+F5
而不是
F5
,只是猜测而已。请显示您所做的,我的意思是显示您的代码。我尝试了Ctrl+F5,但没有成功。我将尝试展示一些代码,但这是一个相当大的项目,所以知道什么更相关并不是小事!嗨,谢谢你的贡献!我要改变的不是新视频文件的路径,而是旧路径末尾的视频文件!(但我可以确认LinkName和Path工作正常,pictureName传递也正确。)@Pablo添加了代码示例,也许可以试一试。我现在就要出发了,但我会试着看看我是否能让这段代码正常工作并解决问题。谢谢!我一直在尝试应用代码,但它没有正常工作(也许我只是做错了什么,我对MVC的经验很少)。如果我直接复制您的代码,我会收到一个投诉,即ActionResult Index()没有返回值。如果我在您的代码之后返回一个视图,该视图将不会加载。代码本身下载了视频的一个实例(你认为会发生这种情况还是我的错?@Pablo你可以试试
@Url.Content(Model[0].FilePath)
,看看这是否适合你。
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>