目前我用FtpWebResponse实现的从ftp下载文件到本地,只能在程序中将保存路径写死,
想问问大家能不能让用户选择保存路径呢?
谢谢各位咯! 

解决方案 »

  1.   


     string ftpPath = @"ftp:192.168.1.1/abc.txt";
            Uri uri = new Uri(ftpPath);
            FtpWebRequest listRequest = (FtpWebRequest)WebRequest.Create(uri);
            string ftpUser = FtpUser;
            string ftpPassWord = FtpPass;
            listRequest.Method = WebRequestMethods.Ftp.DownloadFile;
            listRequest.Credentials = new NetworkCredential(ftpUser, ftpPassWord);
            listRequest.KeepAlive = true;
            //获取一个请求响应对象 
            FtpWebResponse response = (FtpWebResponse)listRequest.GetResponse();
            //获取请求的响应流 
            Stream responseStream = null;
            responseStream = response.GetResponseStream();
            try
            {
                MemoryStream mem = new MemoryStream(1024 * 5000);
                byte[] buffer = new byte[1024];
                int bytesRead = 0;
                int TotalByteRead = 0;
                while (true)
                {
                    bytesRead = responseStream.Read(buffer, 0, buffer.Length);
                    TotalByteRead += bytesRead;
                    if (bytesRead == 0)
                        break;
                    mem.Write(buffer, 0, bytesRead);
                }
                if (mem.Length > 0)
                {
                     mem.ToArray();                 HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.Buffer = true;
                    //Response.ContentType = "application/octet-stream";
                    //设置下载
                    HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=abc.txt"));
                    Response.AddHeader("Content-Length", mem.ToArray().Length.ToString());
                    
                     
                    HttpContext.Current.Response.BinaryWrite(mem.ToArray());
                    mem.Close();
                    mem.Dispose(); 
                    
                    return;
                } 
            }
            catch (Exception ep)
            {
                ep.ToString();
                throw ep;
            }不过感觉这个要是大文件可能会给用户带来长时间等待才出现下载提示.