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

tjava_net 2010-09-13 05:01:56
在上传视频时,怎么加进度条??
...全文
380 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
周药师 2010-09-13
  • 打赏
  • 举报
回复
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();
haa17 2010-09-13
  • 打赏
  • 举报
回复
progressBar 不是进度条工具嘛? 楼主可以试试起个线程来读取信息然后赋给这个控件。
tjava_net 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouzhangkui 的回复:]
我在一楼不是给你打了个问号了吗?
你是怎么上传的? 用了什么类? FTP 还是Socket ?
[/Quote]

/// <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;
}
}

}
tjava_net 2010-09-13
  • 打赏
  • 举报
回复
/// <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;
}
}

}
周药师 2010-09-13
  • 打赏
  • 举报
回复
我在一楼不是给你打了个问号了吗?
你是怎么上传的? 用了什么类? FTP 还是Socket ?
tjava_net 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouzhangkui 的回复:]
不知道你如何上传的?
给你一个思路:
你首先获取视频的大小
在你上传的信息返回事件里,根据当前的上传量来滚动进度条
[/Quote]

就是像上传图片一样,
只是在上传时,对视频进行了转换格式,转换成了FLV格式
由于视频转换是需要漫长的等侍,所以想做个进度条,
麻烦指点..
周药师 2010-09-13
  • 打赏
  • 举报
回复
不知道你如何上传的?
给你一个思路:
你首先获取视频的大小
在你上传的信息返回事件里,根据当前的上传量来滚动进度条

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧