在上传视频时,怎么加进度条??

解决方案 »

  1.   


    就是像上传图片一样,
    只是在上传时,对视频进行了转换格式,转换成了FLV格式
    由于视频转换是需要漫长的等侍,所以想做个进度条,
    麻烦指点..
      

  2.   

    我在一楼不是给你打了个问号了吗?
    你是怎么上传的? 用了什么类? FTP 还是Socket ?
      

  3.   

        /// <summary>
        /// 上传视频
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
      if (Request.Files[0].FileName != null)
            {
                string saveName = DateTime.Now.ToString("yyyyMMddHHmmssffff");
                string m_strExtension = Request.Files[0].FileName.Substring(Request.Files[0].FileName.LastIndexOf(".") + 1).ToLower();
                if (m_strExtension == "asf" || m_strExtension == "avi" || m_strExtension == "mpg" || m_strExtension == "3gp" || m_strExtension == "mov" || m_strExtension == "mp4" || m_strExtension == "flv")
                {
                    if (Request.Files[0].ContentLength <= 5242880)
                    {
                    }
                    string fileName = PublicMethod.GetFileName(Request.Files[0].FileName);// GetFileName();                 path = DateTime.Now.ToBinary().ToString() + "." + m_strExtension;                upFileName = Server.MapPath("~/" + PublicMethod.upFile + saveName + "." + m_strExtension);
                    Request.Files[0].SaveAs(Server.MapPath("~/" + PublicMethod.upFile + saveName + "." + m_strExtension));
                    size = Convert.ToString(Request.Files[0].ContentLength);
                    string imgName = saveName + ".jpg";//图片文件名; 
                    string playName = saveName + ".flv";                string playFile = Server.MapPath("~/" + PublicMethod.playFile + saveName);
                    string imgFile = Server.MapPath("~/" + PublicMethod.imgFile + saveName);                PublicMethod pm = new PublicMethod();
                    if (m_strExtension == "flv")
                    {//直接拷贝到播放文件夹下 
                        System.IO.File.Copy(upFileName, playFile + ".flv");
                        pm.CatchImg(upFileName, imgFile);
                    }
                    string Extension = CheckExtension(m_strExtension);
                    if (Extension == "ffmpeg")
                    {
                        pm.ChangeFilePhy(upFileName, playFile, imgFile);
                    }
                    else if (Extension == "mencoder")
                    {
                        //  pm.MChangeFilePhy(upFileName, playFile, imgFile);
                        MessageBox.Show(this, "You can upload only asf, avi, MPG then larger engines, 3gp, mov, mp4 video format, FLV");
                    }                Session["file"] = fileName;
                    me.FMediaPlayPath = PublicMethod.playFile + playName;
                    me.FMediaImgPath = PublicMethod.imgFile + imgName;
                    me.Upurl = PublicMethod.upFile + path;
                }
                else
                {
                    MessageBox.Show(this, "You can upload only asf, avi, MPG then larger engines, 3gp, mov, mp4 video format, FLV.");
                    return;
                }
            }}
      

  4.   


    /// <summary>
      /// 上传视频
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
      {
      if (Request.Files[0].FileName != null)
      {
      string saveName = DateTime.Now.ToString("yyyyMMddHHmmssffff");
      string m_strExtension = Request.Files[0].FileName.Substring(Request.Files[0].FileName.LastIndexOf(".") + 1).ToLower();
      if (m_strExtension == "asf" || m_strExtension == "avi" || m_strExtension == "mpg" || m_strExtension == "3gp" || m_strExtension == "mov" || m_strExtension == "mp4" || m_strExtension == "flv")
      {
      if (Request.Files[0].ContentLength <= 5242880)
      {
      }
      string fileName = PublicMethod.GetFileName(Request.Files[0].FileName);// GetFileName();    path = DateTime.Now.ToBinary().ToString() + "." + m_strExtension;  upFileName = Server.MapPath("~/" + PublicMethod.upFile + saveName + "." + m_strExtension);
      Request.Files[0].SaveAs(Server.MapPath("~/" + PublicMethod.upFile + saveName + "." + m_strExtension));
      size = Convert.ToString(Request.Files[0].ContentLength);
      string imgName = saveName + ".jpg";//图片文件名;  
      string playName = saveName + ".flv";  string playFile = Server.MapPath("~/" + PublicMethod.playFile + saveName);
      string imgFile = Server.MapPath("~/" + PublicMethod.imgFile + saveName);  PublicMethod pm = new PublicMethod();
      if (m_strExtension == "flv")
      {//直接拷贝到播放文件夹下  
      System.IO.File.Copy(upFileName, playFile + ".flv");
      pm.CatchImg(upFileName, imgFile);
      }
      string Extension = CheckExtension(m_strExtension);
      if (Extension == "ffmpeg")
      {
      pm.ChangeFilePhy(upFileName, playFile, imgFile);
      }
      else if (Extension == "mencoder")
      {
      // pm.MChangeFilePhy(upFileName, playFile, imgFile);
      MessageBox.Show(this, "You can upload only asf, avi, MPG then larger engines, 3gp, mov, mp4 video format, FLV");
      }  Session["file"] = fileName;
      me.FMediaPlayPath = PublicMethod.playFile + playName;
      me.FMediaImgPath = PublicMethod.imgFile + imgName;
      me.Upurl = PublicMethod.upFile + path;
      }
      else
      {
      MessageBox.Show(this, "You can upload only asf, avi, MPG then larger engines, 3gp, mov, mp4 video format, FLV.");
      return;
      }
      }}
      

  5.   

    progressBar 不是进度条工具嘛? 楼主可以试试起个线程来读取信息然后赋给这个控件。
      

  6.   

    File.Copy最终调用的是Win32的CopyFile方法,想检测copy到哪个字节基本上比较困难。如果是目录Copy可以使用BackgroundWorker来异步检测Copy到哪个文件。如果是想检测Copy文件的具体内容恐怕要自己写Copy方法,下面两个方法供楼主参考。1、做个假的ProgressBar使用Timer来控制,当Copy某个文件的时候,这个bar不停的在闪烁(见过VB的安装程序吧,有一个条子就这样)。
    2、自己实现文件Copy方法,按字节块复制,每次复制一个字节块发送一个消息通知(需要一个委托)客户端复制了一个块,你大概需要一个OnCopy的方法来触发CopyHander事件。
    获取文件大小,再复制
    ProgressBar.Value =10;
    Application.DoEvents();
    lblProgress.Text = ProgressBar.Value.ToString() + "%";//打开源文件
    FileInfo fileToOpen = new FileInfo(sourceFileName);
    //保存到目标文件
    FileInfo fileToSave = new FileInfo(destFileName);
    //读源文件
    FileStream streamToRead = fileToOpen.Open(FileMode.Open, FileAccess.Read, FileShare.Read);
    //打开目标文件
    FileStream streamToWrite = fileToSave.OpenWrite();
    //设置正常一次读取的字节数
    int bufferSize = 4096;
    //设置正常写文件时的字节数组
    byte[] bufferNormal = new byte[bufferSize];
    //总共写文件的次数
    long readTimes = streamToRead.Length / bufferSize;
    //正常写文件N次后剩余的字节数目
    int remainderSize = Convert.ToInt32(streamToRead.Length % bufferSize);
    //设置剩余写文件时的字节数组
    byte[] bufferRemainder = new byte[remainderSize];
    //循环写数据到目标文件中
    for (long i = 0; i <= readTimes; i++)
    {
        //读源文件
        streamToRead.Read(bufferNormal, 0, bufferSize);
        //写数据到目标文件
        streamToWrite.Write(bufferNormal, 0, bufferSize);
        //s设置进度条的值
        ProgressBar.Value = Convert.ToInt32(i * 100 / readTimes);
        Application.DoEvents();
        //设置Lable上的进度值
        lblProgress.Text = ProgressBar.Value.ToString() + "%";
    }
    //剩余字节的读和写
    if (remainderSize != 0)
    {
        streamToRead.Read(bufferRemainder, 0, remainderSize);
        streamToWrite.Write(bufferRemainder, 0, remainderSize);
    }
    //关闭文件的读写
    streamToRead.Close();
    streamToWrite.Close();