环境:公司内网。ASP网站使用iis架设在http://192.168.3.30:8060上,用户需要登陆网站后点击下载按钮下载\\10.100.10.100\company文件服务器上的文件aaa.zip。求下载文件按钮事件的写法?
本人刚接手此网站的维护,PC地址在192.168.3.150,使用visual Studio 2010进行编写。找到CSDN大神分享的下载方式,代码如下:
    //WriteFile分块下载
    protected void Button3_Click(object sender, EventArgs e)
    {
        string fileName = "aaa.zip";//客户端保存的文件名
        string filePath = @“\\10.100.10.100\company”+ fileName;
        //↑此处原作者使用的是Server.MapPath("DownLoadpath"),但是如果我这样写本地调试会认为路径不存在        System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);        if (fileInfo.Exists == true)
        {
            const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
            byte[] buffer = new byte[ChunkSize];            Response.Clear();
            System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
            long dataLengthToRead = iStream.Length;//获取下载的文件总大小
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
            while (dataLengthToRead > 0 && Response.IsClientConnected)
            {
                int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
                Response.OutputStream.Write(buffer, 0, lengthRead);
                Response.Flush();
                dataLengthToRead = dataLengthToRead - lengthRead;
            }
            Response.Close();
            iStream.Close();
            Response.End();
        }
        else 弹出窗口:文件不存在
    }本地调试时是可以打开浏览器自带下载器并正常完成下载,只是文件较大时下载过程中页面其他按钮点击没有反应,猜想是因为没有使用异步下载?(VS2010应该也不支持异步下载吧?)
调试完成后将网站发布到服务器,然后远程登陆网站并点击下载按钮却会提示文件不存在。我有远程连接到服务器电脑并直接在资源管理器输入\\10.100.10.100是可以打开路径的。不知道为什么发布到服务器上会提示文件不存在。总结问题:
1.代码发布到服务器上为何就无法实现下载了?如何修改?
2.如果可以请告诉我如何解决下载过程中页面按钮点击没有反应?

解决方案 »

  1.   

    path要用IIS的相对路径吧。
      

  2.   

    asp和asp.net是不同了,我就说这么现在还有人用asppublic void Download(string fullPath, string clientFileName)
    {
        if (string.IsNullOrWhiteSpace(clientFileName))
        {
            clientFileName = fullPath;
        }
        clientFileName = System.IO.Path.GetFileName(clientFileName);
        clientFileName = System.Web.HttpUtility.UrlEncode(clientFileName, System.Text.Encoding.UTF8);
        if (clientFileName != null)
        {
            clientFileName = clientFileName.Replace("+", "%20");        using (System.IO.Stream stream = new System.IO.FileStream(fullPath, System.IO.FileMode.Open))
            {
                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
                System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + clientFileName);
                System.Web.HttpContext.Current.Response.AddHeader("Content-Length", stream.Length.ToString(CultureInfo.InvariantCulture));            int index = 0;
                int length = 2048;
                long dataLength = stream.Length;
                if (length > dataLength)
                    length = (int)dataLength;
                byte[] data = new byte[length];
                while (stream.Read(data, index, length) > 0)
                {
                    System.Web.HttpContext.Current.Response.OutputStream.Write(data, index, length);
                    System.Web.HttpContext.Current.Response.OutputStream.Flush();
                    dataLength -= length;
                    if (length > dataLength)
                        length = (int)dataLength;
                    data = new byte[length];
                }
            }
        }    System.Web.HttpContext.Current.Response.End();
    }
      

  3.   

    继续使用共享文件夹的方式,可能给内网带来风险。
    建议还是换成FTP服务器传文件吧
      

  4.   

    同意楼上的说法你想WannaCry么
      

  5.   

    请问博主做的是winfrom项目吗?