这两天在做一个视频上传的同时,给视频截张图。百度搜索了很多,总结了一个适合自己。废话不说了,如下:
Controller中的代码:
<pre name="code" class="csharp">//视频上传
public ActionResult videoAdd()
{
return View();
}
public ActionResult MultiUpload(HttpPostedFileBase files)
{
if (files != null)
{
if (files.ContentLength > 0)
{
string filePath = files.FileName; //获得文件的完整路径名
//以年月日时分秒-毫秒将文件重新命名
string filename2 = DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss-fffffff");
string filename = filename2 + filePath.Substring(filePath.LastIndexOf('.'), filePath.Length - filePath.LastIndexOf('.'));
//设定上传路径(绝对路径)
string upPath = Server.MapPath("~/Uploads/") + filename;
//文件上传到绝对路径
files.SaveAs(upPath);
//设定数据库的存储路径
string savePath = "\\Uploads\\" + filename;
CreateImg(upPath,filename2);
//下面是把相对路径保存到数据库表中
Information info = new Information();
files = Request.Files["files"];
info.title = files.FileName;
info.content = savePath;
db.Information.Add(info);
db.SaveChanges();
}
}
return RedirectToAction("videoIndex");
}
//视频截图
private string CreateImg(string fileName,string filename2)
{
string ffmpeg = Server.MapPath("~/Uploads/ffmpeg.exe");
string vFileName = fileName;
string FlvImgSize = "240x180";
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
string flv_img = filename2 + ".png";
string flv_img_p = System.Web.HttpContext.Current.Server.MapPath("~/Uploads/" + flv_img);
startInfo.Arguments = " -i " + vFileName + " -y -f image2 -ss 2 -vframes 1 -s " + FlvImgSize + " " + flv_img_p;
try { System.Diagnostics.Process.Start(startInfo); }
catch { return ""; }
if (System.IO.File.Exists(flv_img_p)) { return flv_img; }
return "";
}
//删除上传文件
public ActionResult videoDelete(FormCollection from)
{
string str = from["select"];
string[] strDelete = str.Split(',');
foreach (var i in strDelete)
{
if (i != "false")
{
decimal id = decimal.Parse(i);
Informationinfo = db.Information.Find(id);
string videoPath = Server.MapPath(info.content);//转换物理路径(视频)
if (System.IO.File.Exists(videoPath))//判断文件是否存在
{
System.IO.File.Delete(videoPath);//执行IO文件删除视频,需引入命名空间System.IO;
}
string[] img = info.content.Split('.');//截取字符串
string image=img[0]+".png"; //图片地址
string imgPath = Server.MapPath(image);
if (System.IO.File.Exists(imgPath))//判断文件是否存在
{
System.IO.File.Delete(imgPath);//执行IO文件删除图片,需引入命名空间System.IO;
}
db.LRS_INFO_MGT.Remove(info);
}
}
db.SaveChanges();
return Content("<script>alert('删除成功。');window.location.href='");
}
上面的删除图片,因为数据库表中存放的是视频相对路径,没有图片的相对路径。所以删除图片时,先要找到他的存放路径。
在截图时,我把图片的名称(不包括扩展名)设为和视频名称一样,并且存放在同一个文件夹下,所以可以通过截取 视频的相对路径来得到图片的相对路径。
这样就可以删除截取图片