精华内容
下载资源
问答
  • ftp 下载文件

    千次阅读 2012-12-24 16:49:19
    1.从ftp下载文件到D:/ftpDownLoad 2.读取文件写入数据库,然后转移写入后的文件到E:/localhostDowload 3..定时器(spring 的Quartz)定时作业  这里引入的jar包是commons-net-1.4.1.jar 及 jakarta-oro-2.0.8....

    功能描述:定时从ftp上下载文件到本地,读取文件中的电话号码,添加到数据库中。

    1.从ftp下载文件到D:/ftpDownLoad

    2.读取文件写入数据库,然后转移写入后的文件到E:/localhostDowload

    3..定时器(spring 的Quartz)定时作业

     这里引入的jar包是commons-net-1.4.1.jar 及 jakarta-oro-2.0.8.jar;

     因为涉及到大量数据文件的下载和io操作及入库 只是单一的这么写下载就够呛入库操作更是显得坑爹异常。所以还得另想办法。

    在这儿目前想到的解决方案先记下来:

    因为下载的文件可能很多虽然每个文件的数据量不是很多也就不到700kb也就是6.5万条记录差不多的样子。但是动辄几十上百甚至更多的文件,入库的时候自是不必说的,光下载也是很吃力的。所以只能考虑用多线程来解决一下。不过之前没怎么弄过线程这块儿的,这次就当是练练刀 呵呵。。。

    首先如开头所述,这是个基于ssh的项目。下载及入库操作又都是以定时作业的方式来实现。那么就在原有的框架基础上加一个任务的,我且称之为quartz层。那么整个流程就变成 这样了:

    quartz-->传入service 与文件路径-->启用多线程(这边写一个线程类)-->调用service-->调用Dao进行入库操作

     

    首先因为用的是ssh定时任务我选择用sping 的定时任务

    jobClass的代码如下

     

    package com.soarsky.service.quartz;

    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPClientConfig;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    import org.apache.log4j.Logger;
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;

    import com.soarsky.common.util.DownloadFromFtpThread;
    import com.soarsky.common.util.GetConfig;
    import com.soarsky.service.IDownLoadFileFromFtpService;

    /**
     * 定时从ftp下载文件
     * @author JohnYang
     *
     */
    public class FtpDownLoadQuartz implements Job {
     private static Logger logger = Logger.getLogger(FtpDownLoadQuartz.class);

     private IDownLoadFileFromFtpService downLoadFileFromFtpService;
     private String fileName;

     public String getFileName() {
      return fileName;
     }

     public void setFileName(String fileName) {
      this.fileName = fileName;
     }

     public IDownLoadFileFromFtpService getDownLoadFileFromFtpService() {
      return downLoadFileFromFtpService;
     }

     public void setDownLoadFileFromFtpService(
       IDownLoadFileFromFtpService downLoadFileFromFtpService) {
      this.downLoadFileFromFtpService = downLoadFileFromFtpService;
     }

     public FtpDownLoadQuartz(
       IDownLoadFileFromFtpService downLoadFileFromFtpService,
       String fileName) {
      this.downLoadFileFromFtpService = downLoadFileFromFtpService;
      this.fileName = fileName;
     }

     public FtpDownLoadQuartz() {
     }

     @Override
     public void execute(JobExecutionContext context)
       throws JobExecutionException {
      try {
       // 获取map
       JobDataMap dataMap = context.getJobDetail().getJobDataMap();
       // 获取map中的service
       downLoadFileFromFtpService = (IDownLoadFileFromFtpService) dataMap
         .get("downLoadFileFromFtpService");
       FTPClient ftp = new FTPClient();
       // 获取配置信息
       String url = GetConfig.getInstance().getValue("ftp.Ip");
       Integer port = Integer.valueOf(GetConfig.getInstance().getValue(
         "ftp.port"));
       String username = GetConfig.getInstance().getValue("ftp.userName");
       String password = GetConfig.getInstance().getValue("ftp.password");
       String ftpDir = GetConfig.getInstance().getValue("ftp.ftpDir");

       int reply;
       ftp.connect(url, port);
       ftp.setControlEncoding("UTF-8");
       FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
       conf.setServerLanguageCode("zh");

       // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
       ftp.login(username, password);// 登录
       ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
       reply = ftp.getReplyCode();
       if (!FTPReply.isPositiveCompletion(reply)) {
        ftp.disconnect();
        logger.info("登录失败!");
       }
       logger.info("登录成功!");
       ftp.changeWorkingDirectory(ftpDir);// 转移到FTP服务器目录
       logger.info("ftp.getRemoteAddress:" + ftp.getRemoteAddress());
       
       //获得相应目录下要下载的文件列表
       FTPFile[] fs = ftp.listFiles();
       //实例化下载文件线程对象
       DownloadFromFtpThread th = null;
       for (int k = 0; k < fs.length; k++) {
        //获得要下载文件名
        fileName = fs[k].getName();
        th = new DownloadFromFtpThread(downLoadFileFromFtpService,fileName);
        new Thread(th).start();
       }
      } catch (Exception e) {
       logger.error("quartz error......");
       e.printStackTrace();
      }
      logger.info("quartz end......");
     }

    }

     

     


     

    package com.soarsky.service.quartz;

    import java.io.File;

    import org.apache.log4j.Logger;
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;

    import com.soarsky.common.util.GetConfig;
    import com.soarsky.common.util.ReadFromLoaclThread;
    import com.soarsky.service.IDownLoadFileFromFtpService;

    /**
     * 转移下载下来的文件并且入库
     * @author Johnyang
     *
     */
    public class GetDownLoadDateQuartz implements Job {
     private static Logger log = Logger.getLogger(GetDownLoadDateQuartz.class);

     private IDownLoadFileFromFtpService downLoadFileFromFtpService;
     private String fileName;

     
     public String getFileName() {
      return fileName;
     }

     public void setFileName(String fileName) {
      this.fileName = fileName;
     }
     
     public IDownLoadFileFromFtpService getDownLoadFileFromFtpService() {
      return downLoadFileFromFtpService;
     }

     public void setDownLoadFileFromFtpService(
       IDownLoadFileFromFtpService downLoadFileFromFtpService) {
      this.downLoadFileFromFtpService = downLoadFileFromFtpService;
     }
     
     
     public GetDownLoadDateQuartz(IDownLoadFileFromFtpService downLoadFileFromFtpService,String fileName) {
      this.downLoadFileFromFtpService = downLoadFileFromFtpService;
      this.fileName = fileName;
     }
     public GetDownLoadDateQuartz() {
      
     }
     

     @Override
     public void execute(JobExecutionContext context)
       throws JobExecutionException {

      try {
       // 获取map
       JobDataMap dataMap = context.getJobDetail().getJobDataMap();
       // // 获取map中的service
       downLoadFileFromFtpService = (IDownLoadFileFromFtpService) dataMap.get("downLoadFileFromFtpService");
       // //读取下载文件并入库
       String SourcePath = GetConfig.getInstance().getValue("ftp.sourceDir");
       File file = new File(SourcePath);
       String[] nameList = file.list();
       if (nameList.length > 0) {
        for (int i = 0; i < nameList.length; i++) {
         fileName=nameList[i];
         ReadFromLoaclThread th = new ReadFromLoaclThread(downLoadFileFromFtpService, fileName);
         new Thread(th).start();
        }
       }
      } catch (Exception e) {
       log.error("quartz error......");
       e.printStackTrace();
      }
      log.info("quartz end......");
     }
    }

     

     

     

    spring bean.xm.中配置如下:

     <!-- quartz配置 -->

     <!-- 从ftp 下载文件 -->
     <bean name="FtpDownTask" class="org.springframework.scheduling.quartz.JobDetailBean">
      <property name="jobClass"
       value="com.soarsky.service.quartz.FtpDownLoadQuartz" /> <!-- 指定ftp 下载文件job -->
      <property name="jobDataAsMap">
       <map>
        <entry key="downLoadFileFromFtpService" value-ref="downLoadFileFromFtpService" />
       </map>
      </property>
     </bean>

     <bean id="downLoadTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
      <property name="jobDetail">
       <ref bean="FtpDownTask" />
      </property>
      <property name="cronExpression">
       <!--两分钟执行一次

       <value>0 0/2 * * * ?</value>-->

       <!--每天9点执行 -->
       <value>0 0 9 * * ?</value>
      </property>
     </bean>

    <!-- 读取本地的下载文件 并加入数据库  -->
     <bean name="getDownLoadDateTask" class="org.springframework.scheduling.quartz.JobDetailBean">
      <property name="jobClass"
       value="com.soarsky.service.quartz.GetDownLoadDateQuartz" /><!-- 指定定时任务的job -->
      <property name="jobDataAsMap">
       <map>
        <entry key="downLoadFileFromFtpService" value-ref="downLoadFileFromFtpService" />
       </map>
      </property>
     </bean>

     <bean id="getDownLoadDateTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
      <property name="jobDetail">
       <ref bean="getDownLoadDateTask" />
      </property>
      <property name="cronExpression">
       <value>0 0 10 * * ?</value>
      </property>
     </bean>

     

      <!--启用定时任务 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
       <list>
        <ref local="cronTrigger" />
         <ref local="downLoadTrigger"/> 
        <ref local="getDownLoadDateTrigger"/>
       </list>
      </property>
      <property name="startupDelay" value="60"></property>
     </bean>

     

     

    package com.soarsky.common.util;

    import com.soarsky.service.IDownLoadFileFromFtpService;

    /**
     * 多线程下载Ftp上的文件
     * @author JohnYang
     *
     */

    public class DownloadFromFtpThread implements Runnable {

     private IDownLoadFileFromFtpService downLoadFileFromFtpService;
     private String fileName;

     public String getFileName() {
      return fileName;
     }

     public void setFileName(String fileName) {
      this.fileName = fileName;
     }

     public DownloadFromFtpThread(
       IDownLoadFileFromFtpService downLoadFileFromFtpService,
       String fileName) {
      this.downLoadFileFromFtpService = downLoadFileFromFtpService;
      this.fileName = fileName;
     }

     public DownloadFromFtpThread() {

    //注:如果为线程类声明了其他的构造函数,那也要把它的无参构造函数显示写出不然会报异常 (这个有时间再做研究)
     }

     /**
      *
      */
     public synchronized void run() {

      try {
       downLoadFileFromFtpService.downFile(fileName);
      } catch (Exception e1) {
       e1.printStackTrace();
      }
     }

     public IDownLoadFileFromFtpService getDownLoadFileFromFtpService() {
      return downLoadFileFromFtpService;
     }

     public void setDownLoadFileFromFtpService(
       IDownLoadFileFromFtpService downLoadFileFromFtpService) {
      this.downLoadFileFromFtpService = downLoadFileFromFtpService;
     }

    }

     

     

    最后serviceImpl实现就可以了

    /**
      * Description: 从FTP服务器下载文件
      *
      * @param url
      *            FTP服务器hostname
      * @param port
      *            FTP服务器端口
      * @param username
      *            FTP登录账号
      * @param password
      *            FTP登录密码
      * @param remotePath
      *            FTP服务器上的相对路径
      * @param localPath
      *            下载后保存到本地的路径
      * @return
      */
     public void downFile(String fileName) {
      OutputStream output = null;
      FTPClient ftp = new FTPClient();
      //获取配置信息
      String url = GetConfig.getInstance().getValue("ftp.Ip");
      Integer port = Integer.valueOf(GetConfig.getInstance().getValue("ftp.port"));
      String username = GetConfig.getInstance().getValue("ftp.userName");
      String password = GetConfig.getInstance().getValue("ftp.password");
      String ftpDir = GetConfig.getInstance().getValue("ftp.ftpDir");
      String sourceDir = GetConfig.getInstance().getValue("ftp.sourceDir");
      try {
       int reply;
       ftp.connect(url, port);
       ftp.setControlEncoding("UTF-8");
       FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
       conf.setServerLanguageCode("zh");
    //   // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
       ftp.login(username, password);// 登录
       ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
       reply = ftp.getReplyCode();
       if (!FTPReply.isPositiveCompletion(reply)) {
        ftp.disconnect();
        logger.info("登录失败!");
       }
       logger.info("登录成功!");
       ftp.changeWorkingDirectory(ftpDir);// 转移到FTP服务器目录
        output = new FileOutputStream(new File(sourceDir + "/" + fileName));
        ftp.retrieveFile(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"), output);
        output.flush();
        output.close();
      } catch (IOException e) {
       logger.error("下载文件失败!");
       this.downFile(fileName);
       e.printStackTrace();
      } finally {
       if (ftp.isConnected()) {
        try {
         ftp.logout();
         ftp.disconnect();
        } catch (IOException e) {
         e.printStackTrace();
        }
       }
       logger.info("操作结束!");
      }
     }

     

     /**
      * 遍历ftp上所有要下载的txt文件 并录入数据库
      */
     public void saveUsersByDownload(String fileName) {
       // 读取到的数据录入数据库
      String SourcePath = GetConfig.getInstance().getValue("ftp.sourceDir");
      String toPath = GetConfig.getInstance().getValue("ftp.toDir");
      File newFile = new File(toPath);
      //临时文件
      File fs =new File(SourcePath + fileName);
      BufferedReader br = null;
      String str = null;
        try {
         br = new BufferedReader(new InputStreamReader(new FileInputStream(fs)));
         // 添加群组信息到用户群组信息表
         UserGroup oldUserGroup = userGroupDAO.queryByGroupName(fileName
           .substring(0, fileName.length() - 4));
         UserGroup userGroup = new UserGroup();
         if (oldUserGroup == null) {
          userGroup.setGroupName(fileName.substring(0,
            fileName.length() - 4));
          userGroup.setGroupType(1);
          userGroup.setAddTime(DateUtil.getCursorDate());
          userGroupDAO.saveUserGroup(userGroup);
         } else {
          userGroup = oldUserGroup;
         }
         while ((str = br.readLine()) != null) {
          // 添加群组数据到用户信息表
          if (str.matches("^[1][3-8]\\d{9}$")) {
           Userinfo oldUserinfo = userinfoDAO.queryByPhone(str);
           Userinfo userinfo = new Userinfo();
           if (oldUserinfo == null) {
            userinfo.setAddTime(DateUtil.getCursorDate());
            userinfo.setPhone(str);
            userinfoDAO.saveUserinfo(userinfo);
           } else {
            userinfo = oldUserinfo;
           }
             // 更新用户群组关系表
             UserUsergroup userUsergroup = new UserUsergroup();
             userUsergroup.setUserId(userinfo.getId());
             userUsergroup.setUserGroupId(userGroup.getId());
             userUsergroupDAO.saveUserUsergroup(userUsergroup);
            }
           }
          
        } catch (Exception e) {
         e.printStackTrace();
        }
        if (!newFile.exists()) {
         newFile.mkdir();
        }
        // 将文件移到新文件里
        removeFile(SourcePath + fileName, toPath + fileName);
        // 删除源文件
     //  fs.delete();
     }

     

    至此 算是告一段落,运行起来速度是快了测试的时候数据量正常下载还好,入库的速度仍然不理想。因为是初次写着个所以有点儿乱。下载那块儿怎么看怎么别扭,没办法时间仓促, 有时间我会继续整理,并找找到一个好点儿的解决方案来。

    展开全文
  • php curl ftp 下载文件

    2017-05-16 12:17:39
    php curl ftp 下载文件不知道为什么用正常的ftp_get函数下载文件速度特别慢,但是用ftp的客户端下载很快,所以换了curl的下载方式,速度正常function file_upload($ftpIp,$ftpUser,$ftpPwd,$path,$fileSavePath){ ...

    php curl ftp 下载文件

    不知道为什么用正常的ftp_get函数下载文件速度特别慢,但是用ftp的客户端下载很快,所以换了curl的下载方式,速度正常

    function file_upload($ftpIp,$ftpUser,$ftpPwd,$path,$fileSavePath){
        $curlobj = curl_init();//初始化
        //传入ftp的目标文件,如'ftp://192.168.3.1/test/1.jpg'
        curl_setopt($curlobj,CURLOPT_URL,"ftp://".$ftpIp."/".$path);
        curl_setopt($curlobj,CURLOPT_HEADER,0);//不输出header
        curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,0);
        //time out after 300s  
        curl_setopt($curlobj,CURLOPT_TIMEOUT,2000);//超时时间
        //通过这个函数设置ftp的用户名和密码,没设置就不需要!  
        curl_setopt($curlobj,CURLOPT_USERPWD,$ftpUser.':'.$ftpPwd);
    
        $outfile = fopen($fileSavePath,'w+');  //保存到本地文件的文件名  
        curl_setopt($curlobj,CURLOPT_FILE,$outfile);
    
        $rtn = curl_exec($curlobj);
        if(curl_errno($curlobj)){
           writeLog('Curl error: ' . curl_error($curlobj));
        }
        fclose($outfile);
        curl_close($curlobj);
         if($rtn == 1){
            return true;
         }else{
            unlink($fileSavePath);//如果下载失败,但是本地open了这个文件,所以要删除
            return false;
         }
    
    }

    测试下载小文件是正常的,但是如果网速很慢,下载大文件时候,会报一个ftp timeout的错误,目前还在不知道是哪里配置问题,还是什么问题。

    展开全文
  • c#通过ftp下载文件

    千次阅读 2017-12-21 15:07:28
    c#通过ftp下载文件,借用了两位大神的代码  http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html http://blog.csdn.net/csethcrm/article/details/8139744 感谢  在这做下记录 using System; ...

    c#通过ftp下载文件,借用了两位大神的代码 
    http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html

    http://blog.csdn.net/csethcrm/article/details/8139744

    感谢 
    在这做下记录

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    
    //ftp类
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Threading;
    
    using FtpSyn;
    
    namespace FtpSyn
    {
         public class FtpHelper
        {
            //基本设置
            static private string path = @"ftp://" + "192.168.1.103" + "/";    //目标路径
            static private string ftpip = "192.168.1.103";    //ftp IP地址
            static private string username = "root";   //ftp用户名
            static private string password = "";   //ftp密码
    
            //获取ftp上面的文件和文件夹
            public static string[] GetFileList(string dir)
            {
                string[] downloadFiles;
                StringBuilder result = new StringBuilder();
                FtpWebRequest request;
                try
                {
                    request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
                    request.UseBinary = true;
                    request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
                    request.Method = WebRequestMethods.Ftp.ListDirectory;
                    request.UseBinary = true;
    
                    WebResponse response = request.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
                        result.Append(line);
                        result.Append("\n");
                        Console.WriteLine(line);
                        line = reader.ReadLine();
                    }
                    // to remove the trailing '\n'
                    result.Remove(result.ToString().LastIndexOf('\n'), 1);
                    reader.Close();
                    response.Close();
                    return result.ToString().Split('\n');
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message);
                    downloadFiles = null;
                    return downloadFiles;
                }
            }
    
            /// <summary>
            /// 获取文件大小
            /// </summary>
            /// <param name="file">ip服务器下的相对路径</param>
            /// <returns>文件大小</returns>
            public static int GetFileSize(string file)
            {
                StringBuilder result = new StringBuilder();
                FtpWebRequest request;
                try
                {
                    request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + file));
                    request.UseBinary = true;
                    request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
                    request.Method = WebRequestMethods.Ftp.GetFileSize;
    
                    int dataLength = (int)request.GetResponse().ContentLength;
    
                    return dataLength;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取文件大小出错:" + ex.Message);
                    return -1;
                }
            }
    
            /// <summary>
            /// 文件上传
            /// </summary>
            /// <param name="filePath">原路径(绝对路径)包括文件名</param>
            /// <param name="objPath">目标文件夹:服务器下的相对路径 不填为根目录</param>
            public static void FileUpLoad(string filePath, string objPath = "")
            {
                try
                {
                    string url = path;
                    if (objPath != "")
                        url += objPath + "/";
                    try
                    {
    
                        FtpWebRequest reqFTP = null;
                        //待上传的文件 (全路径)
                        try
                        {
                            FileInfo fileInfo = new FileInfo(filePath);
                            using (FileStream fs = fileInfo.OpenRead())
                            {
                                long length = fs.Length;
                                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name));
    
                                //设置连接到FTP的帐号密码
                                reqFTP.Credentials = new NetworkCredential(username, password);
                                //设置请求完成后是否保持连接
                                reqFTP.KeepAlive = false;
                                //指定执行命令
                                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                                //指定数据传输类型
                                reqFTP.UseBinary = true;
    
                                using (Stream stream = reqFTP.GetRequestStream())
                                {
                                    //设置缓冲大小
                                    int BufferLength = 5120;
                                    byte[] b = new byte[BufferLength];
                                    int i;
                                    while ((i = fs.Read(b, 0, BufferLength)) > 0)
                                    {
                                        stream.Write(b, 0, i);
                                    }
                                    Console.WriteLine("上传文件成功");
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("上传文件失败错误为" + ex.Message);
                        }
                        finally
                        {
    
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("上传文件失败错误为" + ex.Message);
                    }
                    finally
                    {
    
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("上传文件失败错误为" + ex.Message);
                }
            }
    
            /// <summary>
            /// 删除文件
            /// </summary>
            /// <param name="fileName">服务器下的相对路径 包括文件名</param>
            public static void DeleteFileName(string fileName)
            {
                try
                {
                    FileInfo fileInf = new FileInfo(ftpip + "" + fileName);
                    string uri = path + fileName;
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    // 默认为true,连接不会被关闭
                    // 在一个命令之后被执行
                    reqFTP.KeepAlive = false;
                    // 指定执行什么命令
                    reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    response.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("删除文件出错:" + ex.Message);
                }
            }
    
            /// <summary>
            /// 新建目录 上一级必须先存在
            /// </summary>
            /// <param name="dirName">服务器下的相对路径</param>
            public static void MakeDir(string dirName)
            {
                try
                {
                    string uri = path + dirName;
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    response.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("创建目录出错:" + ex.Message);
                }
            }
    
            /// <summary>
            /// 删除目录 上一级必须先存在
            /// </summary>
            /// <param name="dirName">服务器下的相对路径</param>
            public static void DelDir(string dirName)
            {
                try
                {
                    string uri = path + dirName;
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    response.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("删除目录出错:" + ex.Message);
                }
            }
    
            /// <summary>
            /// 从ftp服务器上获得文件夹列表
            /// </summary>
            /// <param name="RequedstPath">服务器下的相对路径</param>
            /// <returns></returns>
            public static List<string> GetDirctory(string RequedstPath)
            {
                List<string> strs = new List<string>();
                try
                {
                    string uri = path + RequedstPath;   //目标路径 path为服务器地址
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = reqFTP.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
                        if (line.Contains("<DIR>"))
                        {
                            string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim();
                            strs.Add(msg);
                        }
                        line = reader.ReadLine();
                    }
                    reader.Close();
                    response.Close();
                    return strs;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取目录出错:" + ex.Message);
                }
                return strs;
            }
    
            /// <summary>
            /// 从ftp服务器上获得文件列表
            /// </summary>
            /// <param name="RequedstPath">服务器下的相对路径</param>
            /// <returns></returns>
            public static List<string> GetFile(string RequedstPath)
            {
                List<string> strs = new List<string>();
                try
                {
                    string uri = path + RequedstPath;   //目标路径 path为服务器地址
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = reqFTP.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
                        if (!line.Contains("<DIR>"))
                        {
                            string msg = line.Substring(39).Trim();
                            strs.Add(msg);
                        }
                        line = reader.ReadLine();
                    }
                    reader.Close();
                    response.Close();
                    return strs;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取文件出错:" + ex.Message);
                }
                return strs;
            }
            //从ftp服务器上下载文件的功能  
            public void Download( string fileName)
            {
                FtpWebRequest reqFTP;
                try
                {
                    string filePath = Application.StartupPath;
                    FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + fileName));
                    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                    reqFTP.UseBinary = true;
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.UsePassive = false;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    Stream ftpStream = response.GetResponseStream();
                    long cl = response.ContentLength;
                    int bufferSize = 2048;
                    int readCount;
                    byte[] buffer = new byte[bufferSize];
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                    while (readCount > 0)
                    {
                        outputStream.Write(buffer, 0, readCount);
                        readCount = ftpStream.Read(buffer, 0, bufferSize);
                    }
                    ftpStream.Close();
                    outputStream.Close();
                    response.Close();
    
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }  
    
        }
    }
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                FtpHelper m_ftp=new FtpHelper();
    
                string[] list = FtpHelper.GetFileList("/");
    
    
                m_ftp.Download("monitor_config.xml");
    
            }
        }
    }
    展开全文
  • C# 通过ftp 下载文件失效? 下载下来的文件大小与服务器上大小相同,但是无法使用此文件. 也不报错,没异常,偶发性的. 通过vpn连到公司内网,再下载文件出现这样的情况比较高. 下载的文件是图片.查看图片时 下载的文件...
  • python从ftp下载文件代码如下 import os from ftplib import FTP def ftp_connect(host, username, password): ftp = FTP() # ftp.set_debuglevel(2) ftp.connect(host, 21) ftp.login(username, password)...

    python从ftp下载文件代码如下

    import os
    from ftplib import FTP

    def ftp_connect(host, username, password):
        ftp = FTP()
        # ftp.set_debuglevel(2)
        ftp.connect(host, 21)
        ftp.login(username, password)
        return ftp

    """
    从ftp服务器下载文件
    """
    def download_file(ftp, remotepath, localpath):
        bufsize = 1024
        fp = open(localpath, 'wb')
        ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize)
        ftp.set_debuglevel(0)
        fp.close()

    """
    从本地上传文件到ftp
    """
    def upload_file(ftp, remotepath, localpath):
        bufsize = 1024
        fp = open(localpath, 'rb')

        ftp.storbinary('STOR' + remotepath, fp, bufsize)
        ftp.set_debuglevel(0)
        fp.close()


    if __name__ == "__main__":
        ftp = ftp_connect("130.17.177.140", "ftp", "ftp0")
        print(ftp)
        download_file(ftp, r"/工作站文档统一存放位置/kpi_day_report/LTE/2019-11-09/LTE_KPI_质差小区日报_2019-11-09_莱芜.xlsx", r"D:/abc/LTE_KPI_质差小区日报_2019-11-09_莱芜.xlsx")
                             
        #调用本地播放器播放下载的视频
        #os.system('start "C:\Program Files\Windows Media Player\wmplayer.exe" "C:/Users/Administrator/Desktop/test.mp4"')
        #upload_file(ftp, r"IMG_0682.jpg", "E:\我们的照片\新建文件夹\IMG_0682.jpg")

        ftp.quit()

    使用ftplib上传文件的时候,遇到包含中文的文件名报错UnicodeEncodeError: 'latin-1' codec can't encode charactersin position 4-5: ordinal not in range(256)

    查阅了很多网上的资料,发现在python自带的模块ftplib.py中定义了编码模式

    vim /usr/local/python3/lib/python3.6/ftplib.py

    初始的编码模式是

    coding = 'latin-1'

    后来笔者把他改成了‘utf-8’

    但是问题并不能解决

    最后笔者狠下心来把他改成了

    encoding = "GB2312"

    问题迎刃而解

    展开全文
  • C#FTP下载文件返回文件路径或者byte[]

    千次阅读 2017-03-29 16:55:15
    FTP下载文件返回文件路径和返回byte[]方法,以PDF为例 FTP下载文件保存到本地并返回文件路径 public static string returnFilePath(string filePath, int yymxid) { FtpWebRequest reqFTP; try ...
  • FTP下载文件到文件夹+进度条

    千次阅读 2018-05-21 21:00:11
    任务是通过python FTP下载文件到内存 再到文件,好像没有搞清楚如何下载到内存,只是通过重载FTP中retrbinary函数,在里面增加打印下载进度条的功能,后面看到别人是拿pycurl做的,之后好好学习一下。from ftplib ...
  • java从FTP下载文件功能

    千次阅读 2017-08-25 10:59:22
    java从FTP下载文件功能,导出的时候会下载到浏览器默认下载文件夹里,360浏览器会弹出一个保存文件的弹出框 //下载导出报表 //JS function downloadExport(filename){ window.location.href=”/order-center/ui...
  • Java FTP 下载文件和文件夹

    千次阅读 2016-10-24 10:49:46
    Java FTP 下载文件和文件夹 Java FTP 2013-12-13 22:58:45 发布 您的评价:   0.0 收藏 0收藏 用apache下的common-net.jar包开发Java FTP下载功能 导入apache...
  • java ftp下载文件

    千次阅读 2019-08-02 12:22:49
    1、使用官方正规的jar ...注意:使用ftp从windows服务器下载文件和从linux服务器下载文件不一样 2、用ftp从linux服务器下载文件 System.out.println(new Date()+" 开始进入ftpDownload定时器"); /...
  • python ftp下载文件

    千次阅读 2019-03-15 15:47:13
    # -*- coding: utf-8 -*- ...#实现从ftp下载文件到本地 from ftplib import FTP import os def ftpconnect(host, username, password): ftp = FTP() # 设置变量 timeout = 30 port = 21 ...
  • ruby通过ftp下载文件

    千次阅读 2013-05-24 20:37:33
    Ruby 通过 FTP 下载文件   require 'net/ftp' 2   3 ftp = Net::FTP.new('ftp.ruby-lang.org') 4 ftp.passive = true 5 ftp....
  • Java中实现ftp下载文件至本地(详细): 2020-09-13:今天记录一下java中实现ftp下载文件至本地的功能模块,同此与大家交流分享有什么不对的地方大家可以指出! 1.FTP协议: 什么是FTP呢?FTP 是 TCP/IP 协议组中的...
  • angularjs $http 如何使用路径地址去FTP下载文件
  • 今天遇到问题从ftp下载文件到本地路径无法查看,发现是文件名称中含有比如空格,问号等非常规字符存在,虽然在本地创建了对应的文件,但是流无法识别一些非常规字符,所以即使下载到本地也显示文件损坏或错误。...
  • 使用FTP下载文件

    2010-03-26 20:06:00
    FTP下载文件:创建FTP组件(get) 1、用一个InternetOpen调用设置环境。2、调用InternetConnect 函数与主机连接。3、调用FtpGetFile 达到文件。4、关闭第1、2步创建的句柄,用InternetCloseHandle 函数。InternetOpen...
  • 分享知识 传递快乐 这篇文章是Linux实现FTP上传下载的续篇...FTP下载文件并保存执行日志 #!/bin/bash #auth hy ################################################ # # 定义函数 # #########################...
  • java FTP 下载文件

    千次阅读 2019-07-11 16:00:29
    package ... import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import java.io.File; import java...
  • FTP下载文件失败

    千次阅读 2016-12-05 15:01:00
    这几天的定时任务下载文件的脚本失败了。 于是手工执行测试,发现报550 Permission denied. Passive mode refused. 意思就是被动模式下,没有权限获取文件。 解决方案,在脚本中添加一行命令 passive,将被动模式...
  • FTP下载 文件, 用IP 访问没问题,但一换成机器名访问就报:200 Type set to A. 机器名只有几个英文字母,应该没有什么关键字影响
  • linux 连接 ftp 下载文件

    万次阅读 2018-04-13 10:29:17
    需要用root权限的,用下面语句登录root:[java] view plain copysudo -i 登出 exit安装ftp简单粗暴直接运行下面命令:[java] view plain copyyum -y install ftp P.S.还有一种ftp是:在linux中使用的FTP是...
  • 使用java下载ftp文件时,报错如下, ![图片说明](https://img-ask.csdn.net/upload/201805/19/1526659568_447688.png) 经过检验,并不是没有这个文件; 只是因为权限不够,我把这个文件权限给成777是可以的; 但是...
  • ftp下载文件md5错误

    千次阅读 2011-04-27 15:40:00
    使用ftp下载文件时出现md5和源文件不同的错误,后来搞了半天才弄清原来是传输模式的原因: 文件传送有两种方式,即ASCII码和二进制码。ASCII方式传送略快些,但要求被传送文件必须是ASCII码文本文件。二进制码方式...
  • FTP下载文件失真问题

    千次阅读 2018-05-17 16:52:00
    一开始我们使用的是普通的FTP下载方法,后来发现图片有失真问题,于是重新写了一种FTP的下载图片方法二、代码逻辑 public static boolean downloadImage(String hostname, int port, String username, String ...
  • ftp下载文件 简单示例

    2016-12-25 11:08:03
    注意:例如下载test01.txt 文件到本地 ,你本地必须有对应的text01.txt文件 这样才能下载 /** * 连接FTP服务器 * @return 连接 * @throws Exception */ public boolean connectFTPServer(FTPClientVO ...
  • 1 #region 获取FTP服务器上指定文件的大小 2 /// <summary> 3 /// 获取FTP服务器上指定文件的大小 4 /// </summary> 5 /// <param name="fileName">FTP服务器上的文件名</...
  • JAVA 解决FTP下载文件不完整问题

    千次阅读 2019-09-12 10:56:46
    在使用java的ftp下载服务器上的文件获取文件的byte[],然后对byte进行加密传输时, 注意是要获取byte[],而不是下载文件到本地; 发现下载的byte[]大小总是小于文件实际大小,并且下载的大小是变化的 到网上查阅...
  • ftp 下载文件到 客户端输出流 文件名却是download 为下载的文件进行命名: response 设置如下: response.setContentType("application/x-msdownload");  response.setCharacterEncoding("UTF-8");  response....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,934
精华内容 7,973
关键字:

ftp下载文件