我想提供一个上传图片的功能,并且我希望对用户上传进行一下控制。
比如,让用户可以看到上传的进度;应用一些方法,在网络不是很好的情况下,也能最大程度的完成上传。有人提到了stream,我不是很懂,希望高手给我一些建议。

解决方案 »

  1.   

    code project 上有离子.去查查. UPuupupupupupup
      

  2.   

    我给你一个思路。上传后你谈出一个窗口。设定两秒自动刷新一次。把窗体中的那个Table开始的时候宽度为0。最后变成100% 就是进度条样子了。我自己做了一个实现了。效果不错
      

  3.   

    宝玉blog上有这方面的例子.
    能把文件分割大小上传
    还有进度显示~
      

  4.   

    介绍:
    大家知道,我们有上传客户端文件到服务器端的控件,但是这个控件并不提供任何关于上传进度的信息。如果客户端上传文件(尤其是大文件),而页面上没有任何变化,就不容易知道上传操作是否在进行,有多少还没有传完。解决方案就是使用一些技术方法在客户端显示上传进度。
    背景知识:
    向大家推荐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” />