我想做个视频上传,并且要在上传的时候生成一张略图,(相当于打刚打开一个视频时的第一个画面).
文件上传的代码如下:
string nam = myFile.PostedFile.FileName ;
//get the end "." of filename (inclue path)
//取得文件名(抱括路径)里最后一个"."的索引
int i= nam.LastIndexOf(".");
//取得文件扩展名
string newext =nam.Substring(i);
//自动根据日期和文件大小不同为文件命名,确保文件名不重复
DateTime now = DateTime.Now; 
string newname=now.DayOfYear.ToString()+myFile.PostedFile.ContentLength.ToString(); 
//保存文件到是IIS根目录下的upload目录.可以改变.
//用Server.MapPath()取当前文件的绝对目录.在asp.net里"\"必须用"\\"代替
myFile.PostedFile.SaveAs(Server.MapPath("\\upload\\"+newname+newext)); 
//得到这个文件的相关属性:文件名,文件类型,文件大小
fname.Text=myFile.PostedFile.FileName;
fenc.Text=myFile.PostedFile.ContentType ;
fsize.Text=myFile.PostedFile.ContentLength.ToString();
string temp="upload/"+newname+newext;哪位高人可以帮我解决缩略的问题呀.有代码或者思路的,都可以跟贴.先谢过了!

解决方案 »

  1.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=45E7E33C-F149-450E-B5D5-832958C20538
      

  2.   

    To athossmth(athos) ,请问能说得具体点吗?
      

  3.   

    /// <summary>
    /// 上传检查
    /// </summary>
    /// <param name="file">要上传的文件对象</param>
    /// <param name="UploadType">允许上传的类型</param>
    /// <param name="UploadSize">允许上传的大小</param>
    /// <returns></returns>
    private int PreUpload(HtmlInputFile file, string UploadType, int UploadSize)
    {
    int result = 0;
    if (file.PostedFile.ContentLength != 0)
    {
    if (file.PostedFile.ContentLength < 1024 * UploadSize)
    {
    string fileName = file.PostedFile.FileName;
    string newExt = fileName.Substring(fileName.LastIndexOf(".") + 1); bool isType = false; if (!UploadType.Equals("*"))
    {
    string[] s = UploadType.Split(new char[] { ',' }); for (int j = 0; j < s.Length; j++)
    {
    if (newExt.ToLower() == s[j].ToLower())
    {
    isType = true;
    break;
    }
    else
    {
    isType = false;
    }
    }
    }
    else
    {
    isType = true;
    } if (isType)
    {
    result = 1;  //可以上传
    }
    else
    {
    result = 2;  //不能上传此种类型的文件
    }
    }
    else
    {
    result = 3; //文件太大
    }
    }
    else
    {
    result = 4; //文件长度为0,不能上传
    }
    return result;
    }
    /// <summary>
    /// 不处理缩小图片的上传
    /// </summary>
    /// <param name="file">要上传的文件对象</param>
    /// <param name="fileInUploadPath">要上传的目录</param>
    /// <param name="TableID">上传对应表的ID</param>
    /// <param name="UploadType">允许上传的类型</param>
    /// <param name="UploadSize">允许上传的大小</param>
    /// <param name="NewFile">返回新文件名</param>
    /// <returns></returns>
    public int Upload(HtmlInputFile file, string fileInUploadPath, string UploadType, int UploadSize, out string NewFile)
    {
    NewFile = ""; int result = PreUpload(file, UploadType, UploadSize);
    if (result == 1)
    {
    string fileName = file.PostedFile.FileName;
    string newExt = fileName.Substring(fileName.LastIndexOf(".") + 1);
    fileName = fileName.Substring(fileName.LastIndexOf("\\") + 1); string newFileName = fileInUploadPath + "-" + DateTime.Now.ToShortDateString() + "-" + DateTime.Now.Ticks.ToString();
    string savePath = Config.HomePath + "Upload\\" + fileInUploadPath + "\\" + newFileName + "." + newExt;
    savePath = savePath.Replace(@"\\", @"\"); file.PostedFile.SaveAs(savePath); NewFile = newFileName + "." + newExt;
    }
    return result;
    }
      

  4.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.IO; 
    using System.Drawing.Imaging;namespace eMeng.Exam
    {
    /// <summary>
    /// Thumbnail 的摘要说明。
    /// </summary>
    public class Thumbnail : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    Label1.Text = "<h3>在ASP.NET里轻松实现缩略图</h3>"; 
    Button1.Text = "上载并显示缩略图";  } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void Button1_Click(object sender, System.EventArgs e)
    {
    HttpFileCollection MyFileColl = HttpContext.Current.Request.Files; 
    HttpPostedFile MyPostedFile = MyFileColl[0];  if (MyPostedFile.ContentType.ToString().ToLower().IndexOf("image") < 0) 

    Response.Write("无效的图形格式。"); 
    return; 

    GetThumbNail(MyPostedFile.FileName, 100, 100, 
    MyPostedFile.ContentType.ToString(), false, MyPostedFile.InputStream); 
    }
    private System.Drawing.Imaging.ImageFormat GetImageType(object strContentType) 

    if ((strContentType.ToString().ToLower()) == "image/pjpeg") 

    return System.Drawing.Imaging.ImageFormat.Jpeg; 

    else if ((strContentType.ToString().ToLower()) == "image/gif") 

    return System.Drawing.Imaging.ImageFormat.Gif; 

    else if ((strContentType.ToString().ToLower()) == "image/bmp") 

    return System.Drawing.Imaging.ImageFormat.Bmp; 

    else if ((strContentType.ToString().ToLower()) == "image/tiff") 

    return System.Drawing.Imaging.ImageFormat.Tiff; 

    else if ((strContentType.ToString().ToLower()) == "image/x-icon") 

    return System.Drawing.Imaging.ImageFormat.Icon; 

    else if ((strContentType.ToString().ToLower()) == "image/x-png") 

    return System.Drawing.Imaging.ImageFormat.Png; 

    else if ((strContentType.ToString().ToLower()) == "image/x-emf") 

    return System.Drawing.Imaging.ImageFormat.Emf; 

    else if ((strContentType.ToString().ToLower()) == "image/x-exif") 

    return System.Drawing.Imaging.ImageFormat.Exif; 

    else if ((strContentType.ToString().ToLower()) == "image/x-wmf") 

    return System.Drawing.Imaging.ImageFormat.Wmf; 

    else 

    return System.Drawing.Imaging.ImageFormat.MemoryBmp; 

    }  private void GetThumbNail(string strFileName, int iWidth, int iheight, 
    string strContentType, bool blnGetFromFile, System.IO.Stream ImgStream) 

    System.Drawing.Image oImg;

    if (blnGetFromFile) 

    oImg = System.Drawing.Image.FromFile(strFileName); 

    else 

    oImg = System.Drawing.Image.FromStream(ImgStream); 

    oImg = oImg.GetThumbnailImage(iWidth, iheight, null, IntPtr.Zero); 
    string strGuid = System.Guid.NewGuid().ToString().ToUpper(); 
    string strFileExt = strFileName.Substring(strFileName.LastIndexOf(".")); 
    Response.ContentType = strContentType; 
    MemoryStream MemStream = new MemoryStream(); 
    oImg.Save(MemStream, GetImageType(strContentType)); 
    MemStream.WriteTo(Response.OutputStream); 
    } }
    }
      

  5.   

    大家好像都理解错了意思呀.楼主是想实现上传视频生成缩略图,而不是上传图片生成缩略图.
    我感觉如果对于没有压缩过的MPEG这样的,可以通过文件格式,找到第一帧的数据组成图片.
    如果是压缩过的,只好用写一个控制让它播放,然后抓取里面的图片.
    可惜我只做过上传FLASH抓图,没有做过视频的.不过感觉原理还是差不多的.可以到我的站点上下载这个组件(ASP的)http://www.ironsoft.net