在浏览器中从FTP下载文件

 1     public static class FTPHelper
 2     {
 3         /// <summary>
 4         /// 得到特定FTP目录的文件列表
 5         /// </summary>
 6         /// <param name="uri">ftp://{username}:{password}@ftp.baidu.com/{folderName}</param>
 7         public static List<String> ListFiles(Uri serverUri)
 8         {
 9             // The serverUri parameter should start with the ftp:// scheme.
10             if (serverUri.Scheme != Uri.UriSchemeFtp)
11             {
12                 throw new ArgumentException("uri must be ftp scheme");
13             }
14
15             FtpWebRequest ftpRequest = null;
16             StreamReader reader = null;
17             try
18             {
19                 // Get the object used to communicate with the server.
20                 ftpRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
21
22                 ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
23
24                 reader = new StreamReader(ftpRequest.GetResponse().GetResponseStream(), Encoding.Default);
25
26                 //read data.
27                 List<String> fileNames = new List<String>();
28                 string line = reader.ReadLine();
29                 while (line != null)
30                 {
31
32                     fileNames.Add(line);
33                     line = reader.ReadLine();
34                 }
35
36                 return fileNames;
37
38             }
39             catch(Exception ex)
40             {
41                 throw ex;
42             }
43             finally
44             {
45               if(reader != null)
46               {
47                   reader.Close();
48               }
49               if (ftpRequest != null)
50               {
51                   ftpRequest.Abort();
52               }
53             }
54         }
55
56         /// <summary>
57         /// 得到特定文件的大小
58         /// </summary>
59         /// <param name="uri">ftp://{username}:{password}@ftp.baidu.com/{fileName}</param>
60         public static long GetFileSize(Uri serverUri)
61         {
62             // The serverUri parameter should start with the ftp:// scheme.
63             if (serverUri.Scheme != Uri.UriSchemeFtp)
64             {
65                 throw new ArgumentException("uri must be ftp scheme");
66             }
67
68             FtpWebRequest ftpRequest = null;
69             StreamReader reader = null;
70             try
71             {
72                 // Get the object used to communicate with the server.
73                 ftpRequest = (FtpWebRequest)FtpWebRequest.Create(serverUri);
74
75                 ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
76
77                 return ftpRequest.GetResponse().ContentLength;
78             }
79             catch (Exception ex)
80             {
81                 throw ex;
82             }
83             finally
84             {
85                 if (reader != null)
86                 {
87                     reader.Close();
88                 }
89                 if (ftpRequest != null)
90                 {
91                     ftpRequest.Abort();
92                 }
93             }
94         }
95     }

调用ListFile方法把FTP特定目录的所有文件列表显示在web页面上,当单击名称时,下载文件

        /// <summary>
        /// 下载文件(此方法定义在实现Controller某类的某个MVC Controller中)
        /// </summary>
        /// <param name="uri"></param>
        public void DownLoadFile(Uri uri,string fileName)
        {
            //Create a stream for the file
            Stream stream = null;

            //This controls how many bytes to read at a time and send to the client
            int bytesToRead = 10000;

            // Buffer to read bytes in chunk size specified above
            byte[] buffer = new Byte[bytesToRead];

            // The number of bytes read
            try
            {
                long fileSize = FTPHelper.GetFileSize(uri);
                //Create a WebRequest to get the file
                FtpWebRequest fileReq = (FtpWebRequest)FtpWebRequest.Create(uri);

                //Create a response for this request
                FtpWebResponse fileResp = (FtpWebResponse)fileReq.GetResponse();

                //Get the Stream returned from the response
                stream = fileResp.GetResponseStream();

                // prepare the response to the client. resp is the client Response
                var resp = HttpContext.Response;

                //Indicate the type of data being sent
                resp.ContentType = "application/octet-stream";

                //Name the file
                resp.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
                resp.AddHeader("Content-Length", fileSize.ToString());

                int length;
                do
                {
                    // Verify that the client is connected.
                    if (resp.IsClientConnected)
                    {
                        // Read data into the buffer.
                        length = stream.Read(buffer, 0, bytesToRead);

                        // and write it out to the response‘s output stream
                        resp.OutputStream.Write(buffer, 0, length);

                        // Flush the data
                        resp.Flush();

                        //Clear the buffer
                        buffer = new Byte[bytesToRead];
                    }
                    else
                    {
                        // cancel the download if client has disconnected
                        length = -1;
                    }
                } while (length > 0); //Repeat until no data is read
            }
            finally
            {
                if (stream != null)
                {
                    //Close the input stream
                    stream.Close();
                }
            }
        }
时间: 2024-11-07 22:46:15

在浏览器中从FTP下载文件的相关文章

Servlet流操作——在浏览器中打开或者下载PDF文件

在Servlet与客户的请求应答的过程中,底层是通过输入/输出流来实现的.Servlet支持两种格式的输入/输出流.一个是字符输入/输出流.ServletResponse的getWriter()方法返回一个PrintWriter对象,Servlet可以利用PrintWriter来输出字符流形式的正文数据.另一种是字节输入/输出流.ServletResponse的getOutputStream()方法返回一个ServletOutputStream对象,Servlet可以利用ServletOutpu

java实现FTP下载文件

ftp上传下载文件,是遵照ftp协议上传下载文件的,本例仅以下载文件为例. 重要的方法解释: 1.FTP功能相关依赖路径:org.apache.commons.net.ftp.*: 2.ftp默认端口是21,如果非默认端口连接,需指定:ftp.connect(ftphostaddr, 22);//22为端口号 3.ftp.changeWorkingDirectory(ftppath) //实现切换目录 4.FTPFile[] fs = ftp.listFiles(); 获取指定目录下的文件列表

Python之ftp下载文件测试代码

IT审计中有一个最多的执行步骤就是取证.最近的项目过程中,有需要验证ftp服务机密性的需要,就写了一个ftp访问并下载文件的脚本. 此步骤实现目的有三: 1.ftp是否可以匿名访问到敏感信息. 2.在渗透人员拥有低等.中等技术水平前提下,目标ftp服务器的日志记录.入侵检测等是否会产生记录.阻断及预警功能. 3.也是最重要的,在上述条件下,此举基于可渗透时间.现行部署条件.应对防御未来直接支出代价.数据丢失严重性综合得出判断结论,并据此给出建议. 1 #coding=utf-8 2 import

c#.net从ftp下载文件到本地

c#.net从ftp下载文件到本地    /*首先从配置文件读取ftp的登录信息*/ string TempFolderPath = System.Configuration.ConfigurationManager.AppSettings["TempFolderPath"].ToString(); string FtpUserName = System.Configuration.ConfigurationManager.AppSettings["FtpUserName&q

C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令

如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebException 异常消息:远程服务器返回错误: (500) 语法错误,无法识别命令. 参考:http://www.cnblogs.com/webabcd/archive/2007/01/21/626242.html KeepAlive - 指定连接是应该关闭还是在请求完成之后关闭,默认为true ///

.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy 分析过程: 在网上搜索到的解决方案,基本都是将代理置为null:request.Proxy = null; 并没有解释其原因. 调

FTP下载文件工具类

FTP文件下载需要的jar包commons-net-2.0.jar有时还需要:jakarta-oro.jar 1 package com.wdxc.util; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 import java.util.HashMap; 8 import java.util.Ma

android中使用Http下载文件并保存到本地SD卡

---恢复内容开始--- 1.AndroidMainfest.xml中设置权限 1 <uses-permission android:name="android.permission.INTERNET"></uses-permission> 2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission

AIX 用SHELL脚本 自动FTP下载文件

用SHELL脚本 自动FTP下载文件:kaiboss1:/weblogic/bboss> uname -xAIX kaiboss1 3315381580 3 5 00C59CB54C00kaiboss1:/weblogic/bboss> more ./memberupload/memberupload.shcd /weblogic/bboss/memberupload/fileftp -inv 10.1.140.123 <<!>memberfile.loguser ftp31