上传文件的控制??顶者有分 我想提供一个上传图片的功能,并且我希望对用户上传进行一下控制。比如,让用户可以看到上传的进度;应用一些方法,在网络不是很好的情况下,也能最大程度的完成上传。有人提到了stream,我不是很懂,希望高手给我一些建议。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 code project 上有离子.去查查. UPuupupupupupup 我给你一个思路。上传后你谈出一个窗口。设定两秒自动刷新一次。把窗体中的那个Table开始的时候宽度为0。最后变成100% 就是进度条样子了。我自己做了一个实现了。效果不错 宝玉blog上有这方面的例子.能把文件分割大小上传还有进度显示~ 介绍:大家知道,我们有上传客户端文件到服务器端的控件,但是这个控件并不提供任何关于上传进度的信息。如果客户端上传文件(尤其是大文件),而页面上没有任何变化,就不容易知道上传操作是否在进行,有多少还没有传完。解决方案就是使用一些技术方法在客户端显示上传进度。背景知识:向大家推荐Konstantin Vasserman的一篇精彩文章:“用ASP.NET上传文件”。我想说几句关于服务器上传的知识。如果客户端不向服务器端提交资源请求,服务器端将不向客户端发送任何信息,所以向客户端发送文件上传的进度消息是不可能的。为了解决这个问题,我们必须让客户端向服务器端发送请求。下面的这一小段Javascript代码将在2秒中之后向服务器端放松请求。<script> setTimeOut(“_doPostBack('btnRefresh','')“, 2000);</script>在这段代码中,我使用了可以表示上传信息的【PostBack】事件,她将触发由Asp.net创建的【_doPostBack】事件。如何做:好了,道理是很简单的。客户端向服务器端请求上传页面,当她第一次加载的时候,显示上传的窗体页面。当点击“上传”按钮的时候,PostBack (回传)事件被发送到服务器端。服务器端代码创建一个负责文件上传并显示最终信息的进程。页面使用上面的Javascript代码每2秒钟刷新一次页面并更新上传信息。当文件上传完毕,结果就显示出来了。要点就是读取数据包中的数据。下面是上传文件的程序。private void uploadThread(){ byte[] b = new byte[1024]; int read = 0; try { using (FileStream fs = new FileStream(_filename, FileMode.Create)) { while ((read = _stream.Read(b, 0, b.Length)) > 0) { fs.write(b, 0, read); _bytesRead += read); System.Threading.Thread.Sleep(100); } } } catch(Exception ex) { _exception = ex; } _uploaded = true;}你可以看出,数据是以1024字节为单位进行加载的。每次数据包被拷贝的时候,BytesRead属性就开始更新。缓冲的越多,差别就越大(上传大文件的时候这种效果显而易见 sharpcn注。)使用示例:这个 FileUploadTread类已经支持数据上传了。现在要做的就是实例化这个类。FileUploadThread fut = new FileUploadThread(Server.MapPath(“files/the_filename“), theFile.PostedFile.InputStream);继续验证获取上传进程信息。if (!fut.Upload){ // 读取进程信息 string info = String .Format(“{0} of {1} bytes {2} %)“,fut.BytesRead, fut.Length, fut.Persent);}else{ // 文件已经被上传}如需退出上传,只需 Call FileUploadThread类的 Cancel()方法。fut.Cancel();这里有一个狡猾的事情。就是如果用户关闭浏览器,上传仍会继续进行,直到发生超时或者上传完毕。到目前为止,我还没有找到修复这个BUG的方法。这个示例描述了上传页所需的所有必要信息。上传窗体 上传进度条 上传结果还有一个事情我想说的是,ASP.NET限制上传数据大小,如果数据大于上传最大限度值(MaxRequestLeght),请求将不被处理。最大限度值是由 web.config 或者 machine.config 的 httpRuntime决定的。这儿有一个如何将最大限度值设置为 10MB 的例子。<httpRuntime maxRequestLength=”10240” useFullyQualifiedRedirectUrl=”true” executionTimeout=”45” /> 关于System.Drawing.Printing.Margins 线程和多窗体,额…… 我的最终目的是Datagridview 绑定list 在用C#语言开发程序的时候能调用C语言中的函数吗? 关于全文搜索,文件检索的问题 哪位大哥能够帮我这菜鸟解决一个问题关于CheckBox?在线等 再发一次,求实现瑞星杀毒小狮子这样的桌面宠物实现方法!!!!!!!!!高手!!! 如何通过textbox实现向数据库的更新(update)操作 本人菜鸟求解 一个初学者的问题!希望大家帮忙 net 与 corba 通讯进行ssl 通讯的问题 请大家介绍一些好的c#代码生成工具 这样的界面是如何做出来的?
能把文件分割大小上传
还有进度显示~
大家知道,我们有上传客户端文件到服务器端的控件,但是这个控件并不提供任何关于上传进度的信息。如果客户端上传文件(尤其是大文件),而页面上没有任何变化,就不容易知道上传操作是否在进行,有多少还没有传完。解决方案就是使用一些技术方法在客户端显示上传进度。
背景知识:
向大家推荐Konstantin Vasserman的一篇精彩文章:“用ASP.NET上传文件”。
我想说几句关于服务器上传的知识。如果客户端不向服务器端提交资源请求,服务器端将不向客户端发送任何信息,所以向客户端发送文件上传的进度消息是不可能的。为了解决这个问题,我们必须让客户端向服务器端发送请求。下面的这一小段Javascript代码将在2秒中之后向服务器端放松请求。
<script>
setTimeOut(“_doPostBack('btnRefresh','')“, 2000);
</script>
在这段代码中,我使用了可以表示上传信息的【PostBack】事件,她将触发由Asp.net创建的【_doPostBack】事件。
如何做:
好了,道理是很简单的。客户端向服务器端请求上传页面,当她第一次加载的时候,显示上传的窗体页面。当点击“上传”按钮的时候,PostBack (回传)事件被发送到服务器端。服务器端代码创建一个负责文件上传并显示最终信息的进程。页面使用上面的Javascript代码每2秒钟刷新一次页面并更新上传信息。当文件上传完毕,结果就显示出来了。要点就是读取数据包中的数据。下面是上传文件的程序。
private void uploadThread()
{
byte[] b = new byte[1024];
int read = 0;
try
{
using (FileStream fs = new FileStream(_filename, FileMode.Create))
{
while ((read = _stream.Read(b, 0, b.Length)) > 0)
{
fs.write(b, 0, read);
_bytesRead += read);
System.Threading.Thread.Sleep(100);
}
}
}
catch(Exception ex)
{
_exception = ex;
}
_uploaded = true;
}你可以看出,数据是以1024字节为单位进行加载的。每次数据包被拷贝的时候,BytesRead属性就开始更新。缓冲的越多,差别就越大(上传大文件的时候这种效果显而易见 sharpcn注。)
使用示例:
这个 FileUploadTread类已经支持数据上传了。现在要做的就是实例化这个类。
FileUploadThread fut = new FileUploadThread(Server.MapPath(“files/the_filename“), theFile.PostedFile.InputStream);
继续验证获取上传进程信息。
if (!fut.Upload)
{
// 读取进程信息
string info = String .Format(“{0} of {1} bytes {2} %)“,fut.BytesRead, fut.Length, fut.Persent);
}
else
{
// 文件已经被上传
}如需退出上传,只需 Call FileUploadThread类的 Cancel()方法。
fut.Cancel();这里有一个狡猾的事情。就是如果用户关闭浏览器,上传仍会继续进行,直到发生超时或者上传完毕。到目前为止,我还没有找到修复这个BUG的方法。这个示例描述了上传页所需的所有必要信息。上传窗体
上传进度条
上传结果
还有一个事情我想说的是,ASP.NET限制上传数据大小,如果数据大于上传最大限度值(MaxRequestLeght),请求将不被处理。最大限度值是由 web.config 或者 machine.config 的 httpRuntime决定的。这儿有一个如何将最大限度值设置为 10MB 的例子。
<httpRuntime maxRequestLength=”10240”
useFullyQualifiedRedirectUrl=”true”
executionTimeout=”45” />