精华内容
下载资源
问答
  • 主要为大家详细介绍了python实现从ftp服务器下载文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了python实现从ftp服务器下载文件的方法,涉及Python操作FTP的相关技巧,非常具有实用价值,需要的朋友可以参考下
  • java 从ftp服务器下载文件!方便快捷,哈哈!
  • 功能:完成从ftp服务器下载文件到本地电脑(整体复制即目录树是一样的)
  • 从FTP服务器下载文件

    2010-11-08 14:25:04
    从FTP下载文件,有完整的考虑各种问题,可以参考使用
  • 用命令从FTP服务器下载文件

    千次阅读 2020-05-20 16:57:57
    用命令从FTP服务器下载文件 1、FTP 服务器地址 。进入对应服务器 2、输入用户名和密码 3、dir 。查看服务器中的文件 4、cd 文件位置 。 进入被下载文件的当前位置 5、lcd 本地文件目录 。设置文件下载到的本机位置...

    用命令从FTP服务器下载文件

    1、FTP 服务器地址 。进入对应服务器
    2、输入用户名和密码
    3、dir 。查看服务器中的文件
    4、cd 文件位置 。 进入被下载文件的当前位置
    5、lcd 本地文件目录 。设置文件被下载到的本机位置(lcd c:\)
    6、prompt 。打开交互模式,正常情况下是开着的。
    7、mget 文件名.类型 。下载文件(看到"Transfer complete"就表示下载成功了)
    如图:
    在这里插入图片描述

    展开全文
  • 前几天,写了一篇关于如何上传图片保存至FTP服务器的文章,今天继续把上传到FTP服务器的图片下载下来,在页面中进行显示。也就是满足了我们日常代码demo中,页面需要动态加载的图片的实例的实现。(不再需要手动把...

    前几天,写了一篇关于如何上传图片保存至FTP服务器的文章,今天继续把上传到FTP服务器的图片下载下来,在页面中进行显示。也就是满足了我们日常代码demo中,页面需要动态加载的图片的实例的实现。(不再需要手动把图片保存在WebContent下static静态文件夹下哈哈哈,相信很多初学小伙伴为了实现这种效果都是这么干的)
    要点:前端通过ajax提交请求、Controller层ftp服务器路径的获取、本地路径的设置。

    1. html页面

    <html>
    <head>
    <title>获取FTP服务器上的图片</title>
    <meta charset="utf-8">
    </head>
    <body>
    <div>
    	 <a onclick="details();">家庭成员情况</a>
    </div>
    
    <div>
    	<table>
    		<tr>
    			<td>
    				<label>男方照片:</label>
    			</td>
    			<td>
    				<img id="boy"  alt="加载失败" height="50px" weight="50px" >
    			</td>
    		</tr>
    		<tr>
    			<td>
    				<label>女方照片:</label>
    			</td>
    			<td>
    				<img id="girl"  alt="加载失败" height="50px" weight="50px" >
    			</td>
    		</tr>
    	</table>
    </div>
    <script type="text/javascript">
    		function details() {
    		var jtbm = document.getElementById("e_jt").value;
    		$.ajax({
    			type : 'POST',
    			url : //请求controller的路径
    			data : {jt : jtbm},
    			success : function (d){
    
    				//请求成功,给照片处可以用下面的方法给src属性赋值
    				$("#boy").attr('src',d.map['boy']);
    				$("#girl").attr('src',d.map['girl']);
    			}
    		})
    	}
    </script>
    </body>
    </html>
    

    注意:Html代码中没有太多注意事项,完成一个请求就OK。

    2.Controller层代码

    看代码之前也看这么一个请求过程:
    当你在浏览器点击 发起一个请求 后,服务器端此时并没有图片,它只有(或者是他只能读取到)你在数据库中保存的图片路径,它需要继续向ftp服务器发送请求,把图片下载到本地服务器(Tomcat),前端页面通过寻找Tomcat中下载后保存的路径,才能够在页面上展现。
    当你在浏览器点击 发起一个请求 后,服务器端此时并没有图片,它只有(或者是他只能读取到)你在数据库中保存的图片路径,它需要继续向ftp服务器发送请求,把图片下载到本地服务器(Tomcat),前端页面通过寻找Tomcat中下载后保存的路径,才能够在页面上展现。

    
    	@RequestMapping("你的请求路径")
    	@ResponseBody
    	public ResponseModel findOne(String jt, HttpServletRequest request) {
    	    //获取项目发布后的路径,该方法可以获取到根目录。
    		localPath = request.getSession().getServletContext().getRealPath("");
    		System.out.println(localPath);
    
    		//ResponseModel是自己封装的一个SpringMVC aJax返回对象
    		ResponseModel model = new ResponseModel();
    
                /*此部分代码为业务逻辑处理,目的是为了通过传过来的 jt 获取到对应的保存在数据库中的图片路径
                  可忽略我的这部分代码,做你自己的逻辑处理,拿到图片路径即可
                  因为数据库中图片我们都只是保存的图片路径,而不是图片!!!*/
    			Object fms = daoHandler.findOne(FMSModel.class, jt);
    			MraModel mra = new MraModel();
    			Condition condition = new SimpleCondition();
    			System.out.println("==============....=");
    			condition.andEqual("JT_BH", jt);
    			System.out.println("============....===");
    
    			List<MraModel> list = (List<MraModel>) daoHandler.find(MraModel.class, condition);
    			System.out.println(list.get(0).getJtbh());
    			for(MraModel mm : list){
    				System.out.println(mm.getNfsfzfj());
    				boy = mm.getNfsfzfj();
    				System.out.println(mm.getNvfsfzfj());
    				girl = mm.getNvfsfzfj();
    				break;
    			}
    
                /*  业务逻辑处理结束 */
                /* 下面才是今天的重点 */
    			//从ftp服务器下载图片到 -- 服务器
    	
    	        //FtpConection为一个封装的工具类,下文可以看到代码
    			FtpConection conection = new FtpConection(ftp服务器地址, ftp服务器端口, ftp服务器用户名, ftp服务器密码);
    			
    			Map<String,String> map = new HashMap<String,String>();
    			//包含进文件名
    			if(boy != null){ //boy 保存的是从数据库中读取到的路径值,和你前面的业务逻辑处理有关。
    				
    				String hPath = "\\tempfiles\\"+boy; //在发布到本地tomcat后中保存的路径
    				String jsPath = "../../tempfiles/"+boy; //在前端页面取值时 的路径
    				localPath = localPath+hPath; //完整的本地路径
    				
    				boolean flag = conection.downloadFile(boy, localPath);
    				if (flag){
    					System.out.println("下载成功!");
    				}else{
    					System.out.println("下载 error");
    				}
    				map.put("boy",jsPath);
    			}
    			if(girl != null){
    				localPath = request.getSession().getServletContext().getRealPath("");
    				String hPath = "\\tempfiles\\"+girl;
    				String jsPath = "../../tempfiles/"+girl;
    				localPath = localPath+hPath;
    				System.out.println(localPath);
    				boolean flag = conection.downloadFile(girl, localPath);
    				if (flag){
    					System.out.println("下载成功!");
    				}else{
    					System.out.println("下载 error");
    				}
    				map.put("girl",jsPath);
    			}
    			
    			model.setObject(fms);
    			model.setMap(map);
    			model.success();
    		} catch (Exception e) {
    			e.printStackTrace();
    			model.error(e.getMessage());
    		}
    		return model;
    	}
    
    

    注意:

    • 1 request.getSession().getServletContext().getRealPath("")可以获取到项目发布后的路径,也就是为了 前端能顺利拿到图片,从ftp下载下来的图片必须保存在这个根目录下的某个文件夹
    • 2 String hPath = “\tempfiles\”+boy; //在发布到本地tomcat后中保存的路径
      String jsPath = “…/…/tempfiles/”+boy; //在前端页面取值时 的路径
      hPath就是发布到本地tomcat下中的某个路径,但在windows系统中,路径中 使用 “”,但在编译的项目中前端那图片路径中, 使用的是"/"。(注意这两个斜杠的方向)jsPath就是为了前台取值方便,直接通过jsPath就可以拿到值。
    • 3 至于jsPath为什么写成 …/…/这种形式,是因为发布后的项目,你当前的页面的位置和你保存的图片的位置不在同一个文件夹,通过 …/寻找上一级目录,然后走到保存图片的位置。
    • 4 最后把图片路径通过map键值对返回到前端页面

    3. 辅助工具类之 FtpConection

    /**
     * FTP服务器连接,用于访问FTP服务器,实现常用的创建目录、删除目录、上传文件、下载文件等操作。
     */
    public class FtpConection {
    	
    	/**
    	 * 文件上次的缓存区大小
    	 */
    	private static final int BUF_SIZE = 1024*1024;
    	private Logger logger = LoggerFactory.getLogger(FtpConection.class);
    
    	private String hostname;
    	private Integer port;
    	private String username;
    	private String password;
    	
    	FTPClient client;
    
    	/**
    	 * 创建一个与FTP服务器的连接。
    	 * @param url 服务器IP地址
    	 * @param prot 服务端口
    	 * @param username 用户名
    	 * @param password 密码
    	 */
    	public FtpConection(String url, Integer prot, String username, String password) {
    		this.hostname = url;
    		this.port = prot;
    		this.username = username;
    		this.password = password;
    		client = new FTPClient();
    		try {
    			client.connect(hostname, port);
    		} catch (SocketException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    			logger.error("FtpConection:链接FTP服务器发生异常!");
    		}
    		
    		try {
    			client.login(username, password);
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    			logger.error("FtpConection:登陆FTP服务器发生异常!");
    		}
    	}
    	
    	/**
    	 * 获得原始的FTPClient对象
    	 * @return FTPClient对象
    	 */
    	public FTPClient getClient() {
    		return client;
    	}
    
    	/**
    	 * 测试连接和登录是否成功
    	 * @return Boolean值,true-连接并登录成功,false-连接超时或登录失败。
    	 */
    	public boolean isConnected() {
    		boolean result = false;
            int reply = client.getReplyCode();
            String info = null;
            switch (reply) {
    		case 0:
    			info = "连接超时!";
    			break;
    		case 230:
    			info = "连接成功,登陆成功!";
    			result = true;
    			break;
    		case 530:
    			info = "用户名或密码错误!";
    			break;
    		}
            logger.info(info);
    		return result;
    	}
    
    	
    	/**
    	 * 上传文件
    	 * @param localPath 本地文件路径(含文件名)
    	 * @param serverPath FTP服务器存储路径(含文件名)
    	 * @return Boolean值,true-上传成功,false-上传失败(文件存在或目录错误)。
    	 * @throws IOException
    	 */
    	public boolean uploadFiles(String localPath, String serverPath) throws IOException {
    		boolean result = false;
    
    		client.setFileType(FTP.BINARY_FILE_TYPE);
    		client.enterLocalPassiveMode();
    		client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
    		client.setBufferSize(BUF_SIZE);
    		
    		InputStream local = null;
    		try {
    			local = new FileInputStream(localPath);
    			result = client.storeFile(serverPath, local);
    		} finally {
    			if (local != null) {
    				local.close();
    			}
    		}
    	
    		return result;
    	}
    
    
    	/**
    	 * 利用流 上传文件
    	 * @param in 本地流
    	 * @param serverPath 服务器路径
    	 * @return True 文件上传成功,False 文件上传失败
    	 * @throws IOException
    	 */
    	public boolean uploadFiles(InputStream in, String serverPath) throws IOException {
    		boolean result = false;
    
    		client.setFileType(FTP.BINARY_FILE_TYPE);
    		client.enterLocalPassiveMode();
    		client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
    		client.setBufferSize(BUF_SIZE);
    		
    		InputStream local = null;
    		try {
    			local = in;
    			result = client.storeFile(serverPath, local);
    		} finally {
    			if (local != null) {
    				local.close();
    			}
    		}
    	
    		return result;
    	}
    
    	/**
    	 * 下载文件
    	 * @param serverPath FTP服务器文件路径(含文件名)
    	 * @param localPath 本地存储文件路径(含文件名)
    	 * @return Boolean值,true-下载成功,false-下载失败(文件目录不存在或文件不存在)。
    	 * @throws IOException
    	 */
    	public boolean downloadFile(String serverPath, String localPath) throws IOException {
    		boolean result = false;
    
    		client.setFileType(FTP.BINARY_FILE_TYPE);
    		client.enterLocalPassiveMode();
    		client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
    		client.setBufferSize(BUF_SIZE);
    		
    		OutputStream local = null;
    		try {
    			local = new FileOutputStream(localPath);
    			result = client.retrieveFile(serverPath, local);
    		} finally {
    			try {
    				local.close();
    			} catch (Exception e) {
    				// 本地目录不存在,下载失败。
    				logger.error("FTP 下载文件在本地保存出现异常,本地路径不存在!");
    				return false;
    			}
    		}
    		
    		return result;
    	}
    
    	
    	/**
    	 * 退出已登录的FTP用户
    	 * @return Boolean值,true-退出成功,false-退出失败(连接为登录)。
    	 * @throws IOException
    	 */
    	public boolean logout() throws IOException {
    		return client.logout();
    	}
    }
    

    4.辅助工具类之ResponseModel

    
    /**
     * Spring MVC AJAX response 返回对象
     * 
     *
     */
    public class ResponseModel implements Serializable {
    	private static final long serialVersionUID = -446626533112009414L;
    	
    	public static final String EMSG_SYS_ERROR 		= "服务器错误。";
    	public static final String EMSG_SUCCESS   		= "成功完成。";
    
    	public static final String STATUS_SYS_ERROR 		= "0";
    	public static final String STATUS_SUCCESS   		= "1";
    	public static final String STATUS_NO_PERMISSIONS 	= "2";
    	public static final String STATUS_UNKNOW_INPUT 		= "3";
    	public static final String STATUS_NO_LOGIN			= "4";
    
    	public static final String KEY_LIST 	= "list";
    	public static final String KEY_OBJECT 	= "obj";
    	public static final String KEY_MAP	 	= "map";
    
    
    	/**
    	 * 服务器响应状态(0:服务器错误|1:正确完成|2:权限不足|3:未知输入数据)
    	 */
    	private String status;
    	/**
    	 * 服务器错误信息
    	 */
    	private String emsg;
    	/**
    	 * 服务器响应数据
    	 */
    	private Map<String, Object> data;
    
    	public ResponseModel() {
    		super();
    		data = new HashMap<String, Object>();
    	}
    
    	public ResponseModel(String status, String emsg) {
    		this();
    		this.status = status;
    		this.emsg = emsg;
    	}
    
    	public String getStatus() {
    		return status;
    	}
    
    	public String getEmsg() {
    		return emsg;
    	}
    
    	public Map<String, Object> getData() {
    		return data;
    	}
    
    	public String getVersion() {
    		return version;
    	}
    
    	@Override
    	public String toString() {
    		return "ResponseModel [status=" + status + ", emsg=" + emsg + ", data="
    				+ data + "]";
    	}
    
    	/**
    	 * 成功完成。
    	 */
    	public ResponseModel success() {
    		this.success(EMSG_SUCCESS);
    		return this;
    	}
    
    
    
    	/**
    	 * 向返回Model中添加键/值数据。(默认调用success())
    	 * @param key
    	 * @param value
    	 */
    	public void put(String key, Object value) {
    		this.data.put(key, value);
    		this.success();
    	}
    
    	/**
    	 * 向返回Model中添加键/值数据。
    	 * @param key
    	 * @param value
    	 * @param isSuccess 是否成功返回。
    	 */
    	public void put(String key, Object value, boolean isSuccess) {
    		this.data.put(key, value);
    		if (isSuccess) {
    			this.success();
    		}
    	}
    	
    	public Object get(String key) {
    		return data.get(key);
    	}
    	
    	
    	/**
    	 * 向返回Model中添加对象。(使用默认的key[KEY_OBJECT],默认调用success()。)
    	 * @param obj
    	 */
    	public void setObject(Object obj) {
    		this.put(KEY_OBJECT, obj);
    		this.success();
    	}
    	
    	/**
    	 * 向返回Model中添加Map对象。(使用默认的key[KEY_MAP],默认调用success()。)
    	 * @param map
    	 */
    	public void setMap(Map<?, ?> map) {
    		this.put(KEY_MAP, map);
    		this.success();
    	}
    }
    
    

    至于你的项目发布后,各个文件夹的相对位置可以通过右键项目–》 Properties --》Deployment Assembly 查看
    查看项目发布后的路径

    原创文章,未经作者允许,严禁转载!
    文章:如何上传文件图片至FTP 服务器

    展开全文
  • 从Ftp服务器定时下载文件 并对文件解析 其中用到数据库 可以自己根据需求配置
  • 作为软件测试人员,经常要发布开发的集成包。...更新流程背景1、一台可用FTP连接的服务器上,下载集成人员集成好的最新包。 2、解压下载的集成包,解压后,生成9个程序包,每个程序包是以.tar.gz格式压缩。 3、将9

    作为软件测试人员,经常要发布开发的集成包。本来嘛,更新个服务,没什么大不了。但是集成包打出来,要更新的服务有9个(分别部署在三台服务器上),并且以后还会增加。如果手动更新,每次更新时间都得20分钟以上,长此以往,非常浪费时间。

    更新流程背景

    1、从一台可用FTP连接的服务器上,下载集成人员集成好的最新包。
    2、解压下载的集成包,解压后,生成9个程序包,每个程序包是以.tar.gz格式压缩。
    3、将9个包,分别上传至对应服务器(3台linux服务器)
    4、关闭服务器上的服务,并备份未更新前的服务程序
    5、解压上传的.tar.gz文件至指定目录
    6、替换加压后文件中的一个conf文件夹中的配置
    7、启动服务。

    脚本编写

    从FTP服务器下载文件

    python 内置ftplib库,可以方便的通过FTP连接服务器

    FTP连接

    def ftp_connect(host, port, username, password, encoding="UTF-8"):
        """Connect server via FTP.
        If connect sucessfully, return ftp object, else return False!"""
        try:
            ftp = FTP()
            ftp.set_debuglevel(0)   #打开调试级别2,显示详细信息;0为关闭调试信息 
            ftp.set_pasv(0)#0主动模式 1 #被动模式
            ftp.encoding = encoding
            ftp.connect(host, port)
            ftp.login(username, password)   #登录,如果匿名登录则用空串代替即可 
            return ftp
        except Exception as e:
            print("Connect FTP Error!")
            print("Error:", str(e))
            return False

    定义一个函数,传参分别是服务器IP,端口,用户名,密码,编码。

    FTP文件下载

    def ftp_download():
        """Download file via ftp connection!
        Get the latest file from the dir file_path["DB/Middle"][0],
        Save the file to the dir file_path["DB/Middle"][1]."""
        file_path = {"DB":["/省略.../DB", "D:/FTP/DB/"], "Middle":["/省略.../Middle", "D:/FTP/Middle/"]}
        ftp = ftp_connect()
        if ftp:
            for each in file_path:
                ftp.cwd("/") #改变路径
                try:
                    ftp.cwd(file_path[each][0]) #改变路径
                except:
                    print("There is no such [%s] directory!" % file_path[each][0])
                    continue
                #ftp.dir()
                #print ftp.getwelcome()#显示ftp服务器欢迎信息 
                #ftp.cwd('xxx/xxx/') #选择操作目录
    
                del_dir(file_path[each][1], isfile=True) #删除当前目录的解压后的文件夹
                bufsize = 1024 
                file_name = ftp.nlst()[-1] #取当前路径的文件名列表(按时间顺序排序)
                try:
                    file_handler = open(file_path[each][1] + file_name,'wb').write #以写模式在本地打开文件
                except:
                    print("There is no such [%s] directory!" % file_path[each][1])
                    continue
                try:
                    print("[%s] will be downloaded!" % file_name)
                    ftp.retrbinary('RETR %s' % os.path.basename(file_name),file_handler,bufsize)#接收服务器上文件并写入本地文件 
                    #ftp.set_debuglevel(0) 
                    #file_handler.close()
                    print("[%s] downloads completed!" % file_name)
                except Exception as e:
                    print("Download file[%s] Error!" % file_name)
                    print("Error:", str(e))
            ftp.quit()

    介绍一下file_path变量:

    file_path = {"DB":["/省略.../DB", "D:/FTP/DB/"], "Middle":["/省略.../Middle", "D:/FTP/Middle/"]}
    file_path["DB"][0]是FTP服务器上下载的需要执行的sql文件
    file_path["DB"][1]是FTP服务器上下载的需要执行的sql文件存放于本地磁盘的路径
    file_path["Middle"][0]是FTP服务器上下载的中台程序包(解压后会产生9个.tar.gz包)
    file_path["Middle"][1]是FTP服务器上下载的中台程序包存放于本地磁盘的路径

    del_dir()是自定义的函数,主要作用是删除当前目录下的所有文件或者文件夹。具体实现如下:

    def del_dir(path, isdir=True, isfile=False):
        """Delete files or directories!
        The files or directories whether would be deleted pointing to isdir/isfile is true or false.
        If true, then will be deleted"""
        os.chdir(path)
        for each in os.listdir():
            if os.path.isdir(each):
                if isdir:
                    shutil.rmtree(each)
                    print("The dir[%s] was removed!" % each)
            else:
                if isfile:
                    os.remove(each)
                    print("The file[%s] was removed!" % each)

    此处还用到解压.rar文件,需要安装rarfile库。
    解压方法如下:

    def un_rar(path):
        """Extract rar file!
        Argue path is the dir, file is the one which will be extract!"""
        try:
            os.chdir(path)
            for each in os.listdir():
                if os.path.isfile(each):#当前目录只有一个文件
                    file = each
            rar = rarfile.RarFile(file) 
            os.mkdir(file[:-4]) #创建rar文件解压后的存放路径
            rar.extractall(file[:-4]) #解压文件到指定路径
            print("Un_rar file[%s] Successfully!" % file)
        except Exception as e:
            print("Un_rar file[%s] failed!" % file)
            print("Error:", str(e))
        finally:
            rar.close()

    SSH连接

    python支持ssh连接的库还是比较多的,此处选择paramiko库(关于windows安装paramiko库,我在上一篇文章中做了记录,可供大家参考)

    def ssh_connect(host="192.168.226.131", port=22, username="root", password="chenkang0818", encoding="UTF-8"):
        """Connect to server via SSH.
        If connect successfully return ssh object, else return False."""
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #这行代码的作用是允许连接不在know_hosts文件中的主机。
            ssh.connect(host, port=port, username=username, password=password)
            return ssh
        except Exception as e:
            print("SSH Connect Error!")
            print("Error:", e)
            return False

    SSH连接linux服务器上传文件

    连接服务器成功后,接下来就是上传文件。使用sftp.put(file_1,file_2)命令,如果服务器存在file_2,那么该文件会被替换,如果没有则直接拷贝至服务器。

    def ssh_upload():
        """A ssh upload fuction!"""
        for ip in SERVER_INFO:
            ssh = ssh_connect(host=ip, port=SERVER_INFO[ip]["port"], username=SERVER_INFO[ip]["username"], password=SERVER_INFO[ip]["password"]) #以ssh形式连接服务器
            if not ssh: #如果连接不成功,则跳过
                print("Connect server[%s] failed!" % ip)
                continue
            call_command(ssh, "cd middle; ./middle_stop")   #连接上服务器后,执行关闭服务脚本
            print("Preparing for starting...............")
            sftp = ssh.open_sftp()  #打开一个sftp形式连接服务器
            os.chdir(SERVER_INFO[ip]["get_path"])
            try:
                if len((lambda count=0:[ count+1 for each in os.listdir() if os.path.isdir(each)])()) == 1:  #防止middle文件夹中含有多个解压文件夹,确保上传服务器的文件是最新的
                    for each in os.listdir():
                        if os.path.isdir(each):
                            local_get_path = os.path.join(os.getcwd(), each) #合并路径
                            print("Uploading file on the server [%s]" % (ip))
                            for file in SERVER_INFO[ip]["get_file"]:
                                local_get_file = os.path.join(local_get_path, file) #合并路径
                                sftp.put(local_get_file, "/home/hundsun/middle/" + file) #将本地文件上传至服务器
                                print("Up file[%s] successfully!" % file)
                            call_command(ssh, "cd middle; ./middle_start") #当前服务器所有tar文件替换完毕后,执行启动脚本
            except Exception as e:
                print("Upload file[%s] failed!" % file)
                print("Error:", str(e))
            finally:
                sftp.close()
                ssh.close()

    说明:

    SERVER_INFO是定义的一个字典,其格式为:
    SERVER_INFO = {"xx.xx.xx.xx":{"port":22, "username":"root", "password":"xxxxxx", "get_path":"D:/FTP/Middle/", 
                                         "get_file":["xx1.tar.gz", 
                                                      "xx2.tar.gz",
                                                      "xx3.tar.gz"],
                                         "save_path":"/home/省略.../"}}

    其中get_path是指:要上传服务器的程序包(.tar.gz文件)的本地路径get_file的是指:需要上传至服务器更新的程序包
    save_path是指:上传至linux服务器的路径

    os.path.join(get_path, get_file)是要上传的程序包的整个路径

    call_command()是自定义函数,主要是运行服务器上启动,停止服务的脚本。定义如下:

    def call_command(ssh, cmd):
        stdin,stdout,stderr = ssh.exec_command(cmd)
        print("-------------------return result--------------------")
        for each in stdout.readlines():
            print(each)
        print("----------------------Error-------------------------")
        for each in stderr.readlines():
            print(each)

    这里着重说一下paramiko的exec_command(cmd)方法。
    开始的时候我产生一个误区,以为:先执行ssh.exec_command(“cd /home/abc/efg”),shh就会定位在/home/abc/efg,其实不是这样的。
    通过paramiko建立ssh连接,会默认定位于/home/当前用户的路径。
    如果你想先cd /home/abc/efg,而后执行/home/abc/efg路径下的脚本./stop.sh则应该这样:ssh.exec_command(“cd /home/abc/efg; ./stop.sh”)

    运行程序

    以下是运行程序方法:

    spend_time()(ftp_down)
    un_rar("D:/FTP/Middle/")
    un_rar("D:/FTP/DB/")
    spend_time()(ssh_upload)

    为了查看各个过程花费的时长,做了个时间统计。前面说手动操作是20分钟以上,那么当然想看看程序能为我们节省下多少时间。
    spend_time()函数定义如下:

    def spend_time():
        """Calculate calling a fuctionthe how longs it will spend. """
        time1 = time.time()
        def wrapper(func):
            func()
            time2 = time.time()
            return print(time2-time1)
        return wrapper

    涉及库

    以下是支撑该脚本运行的库

    from ftplib import FTP 
    import os, time
    import paramiko
    import rarfile
    import shutil
    import pymysql

    windows安装paramiko库我上篇文章提过。
    windows安装rarfile安装可用pip命令。安装完毕之后,找到windows下rar安装路径,将Unrar.exe放在python的环境变量中即可。
    以下是windows 64位Unrar.exe程序包。
    链接:http://pan.baidu.com/s/1hsJmZbe 密码:ee6h

    展开全文
  • c#从ftp服务器下载文件 丢给浏览器响应
  • window系统下使用,从ftp服务器下载文件下载后,解压到c盘根目录,修改ftp.txt文件中的IP地址,ftp用户名和密码,执行ftp.bat后,把ftP服务器上的文件下载到c:/ftpfile目录。
  • 从ftp服务器实现简易上下载文件

    千次阅读 2019-09-02 19:58:35
    前几天心血来潮,就学习了一下用java实现ftp上传和下载文件的内容

    前几天学习了一下用java实现ftp上传和下载文件的内容,学之前查了一下ftp,遇到了一些问题,首先说明,ftp和tomcat无法进行比较,因为ftp为专门上载下载文件、存储文件的服务器,而tomcat则是进行项目部署的服务器,也就是将项目打包成war包,放入webapps中进行访问的服务器,因为两者的作用并不相同,所以无法进行比较
    在idea中新建一个Maven工程,添加依赖,依赖为:

        <dependencies>
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>3.6</version>
            </dependency>
        </dependencies>
    

    1、和连接数据库步骤差不多,先找到IP地址,访问服务器端口,进行连接,然后进行登录,登录是必须步骤,否则会因为没有的登录而报错,然后验证登录返回码,判断是否登陆成功,代码如下:

        public ftpUtil(String ip,int port,String name,String pwd){//将加载写入构造器内
            ftp = new FTPClient();
            this.ip = ip;
            this.port = port;
            this.name = name;
            this.pwd = pwd;
    
            try{
                System.out.println("connecting ftp server..." );
                ftp.connect(ip,port);
                ftp.login(name,pwd);//不登录会报错,若是本地ftp服务器,则直接用计算机管理员登录即可
                int replyCode = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(replyCode)){
                    System.out.println("connect ftp server failed..." );
                    return;
                }
                System.out.println("connect ftp server success..." );
                ftp.setCharset(Charset.forName("UTF-8"));
                ftp.setControlEncoding("UTF-8");
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    

    2、上传文件到服务器,由于可能有人直接上传包含文件的目录,所以,对上传的文件进行判断是否为目录,若是目录,则在服务器内创建目录,然后再进行判断,直到将上传的目录内的内容全部输入到ftp服务中

     public void putLoad(File f) throws IOException {
            if (f.isDirectory()){//判断文件是否是一个目录
                ftp.makeDirectory(f.getName());//如果是,则在ftp服务器中新建一个目录
                ftp.changeWorkingDirectory(f.getName());//切换到传过来的path,也就是ftp.makeDirectory刚创建的目录
                String [] files = f.list();//获取本目录下的本级全部文件名和目录名
                for(String fstr:files){
                    File file1 = new File(f.getPath()+"/"+fstr);
                    if (file1.isDirectory()){//判断本级的某一个文件是否是目录
                        putLoad(file1);
                        ftp.changeToParentDirectory();//将要设置的目录更改为当前目录的父级
                    }else {
                        File file2 = new File(f.getPath()+"/"+fstr);//访问文件
                        FileInputStream input = new FileInputStream(file2);
                        ftp.storeFile(file2.getName(),input);//将文件上传到FTP服务器上
                        flag = false;
                        System.out.println("Upload File Completion...");
                        input.close();
                    }
                }
            }else{
                File file2 = new File(f.getPath());
                FileInputStream input = new FileInputStream(file2);
                ftp.storeFile(file2.getName(),input);
                flag = false;
                System.out.println("Upload File Completion...");
                input.close();
            }
        }
    

    3、下载文件,下载文件相对于上载文件要简单一些,因为用户会直接在ftp中选择文件,然后直接对文件进行下载,不会牵涉到目录的问题,下载文件后在本地存储的位置也是用户自己可以进行编辑的,所以,只需要将ftp服务器上的文件的内容进行读取,然后将读取到的内容写入到本地创建的文件中

        public void downLoad(String ftppathname, String filename, String localpath)throws Exception{
            System.out.println("download file will begin...");
            ftp.changeWorkingDirectory(ftppathname);//切换到ftp服务器的目录
            FTPFile []ftpFiles = ftp.listFiles();
            for (FTPFile file: ftpFiles) {
                if (filename.equalsIgnoreCase(file.getName())){
                    File localfile = new File(localpath+"/"+file.getName());
                    FileOutputStream output = new FileOutputStream(localfile);//创建localfile文件
                    ftp.retrieveFile(filename,output);//从ftp服务器中检索文件,写入FileOutputStream中(只能写入FileOutputStream)
                    System.out.println("Download File Completion...");
                    output.close();
                }
            }
            System.out.println();
        }
    
    展开全文
  • python 从ftp服务器下载文件及文件夹

    万次阅读 2018-10-31 15:17:38
    #python3.6 from ctypes import * import os import sys import ftplib class myFtp: ftp = ftplib.FTP() def __init__(self, host, port=9000): self.ftp.connect(host, port) def Login(...
  • EOF //登录ftp服务器 user username password //输入用户名密码 binary cd ./test //FTP下载目录 lcd ./test //本地目录 prompt mget * //下载目录下所有文件 bye EOF记得给权限注:报错bad interpreter: No su...
  • @Service示例,用于使用Spring Boot从FTP服务器连接,上传和下载文件。 该项目实现了@Service Spring Boot,该服务启用并提供了一个简单的API,以便其他开发人员可以重用它来连接到实现FTP协议的服务器。 它提供了...
  • java 远程从FTP服务器下载文件到本地

    千次阅读 2017-06-21 10:40:45
    package com.cassiatwig.liuliangqianbao.util... import org.apache.commons.net.ftp.FTPClient;  import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import jav
  • Java FTP 实现跨服务器文件上传下载

    热门讨论 2013-11-19 13:44:01
    Java 程序实现的 FTP服务器文件上传下载功能。
  • JAVA操作FTP文件服务器上传与下载文件,包含远程动态创建文件夹、查看文件是否存在、删除文件、上传文件下载文件等方法
  • 实现从FTP服务器下载PDF,标有注释。
  • 最近工作碰到一个问题,之前是使用bat程序从FTP服务器上获取文件的,在防火墙关闭的时候没有问题可以正常下载下来,但是当开启防火墙之后,就无法下载了提示连接超时,但是我用FTP客户端是可以下载的,用CMD命令开启...
  • 通过FTP从服务器下载文件

    千次阅读 2020-09-02 14:53:28
    1.先设置好FTP服务器地址、端口、服务器文件存放路径、文件本地存储路径、用戶名和密碼(我这里获取的是服务器根目录下当天日期 (“yyyy-mm-dd”) 的文件夹) Date now = new Date(); SimpleDateFormat dateFormat...
  • 采用C#语言,实现通过FTP协议获取服务器文件列表和下载文件-Using C# language, to achieve access to the server via FTP protocol file list and download files
  • 主要介绍了JAVA技术实现上传下载文件FTP服务器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器文件的上传/下载/删除等操作,需要的朋友可以参考下
  • FTP服务器文件下载方法

    千次阅读 2021-06-04 10:22:00
    FTP服务器下载文件教程 原理 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用...
  • 主要介绍了FTP服务器详解之监控ftp服务器、上传文件ftp服务器、ftp文件监控的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • FTP服务器下载文件,用的apache的包,解决中文乱码,可批量下载文件,jar包我的另外一个资源有的!
  • 最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能。首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer来设置隔多长时间来下载。后来又...
  • FTP服务器单个文件下载FTP服务器文件打包下载
  • FTP内部默认以ASCII的形式进行文件传输,但是这中传输方式可能会导致文件内容损坏,尤其是文本文件和图片文件,我们配置让他以二进制的形式上传,下载文件即可 FTP默认传输形式: 我们在自己的代码中定义二进制传输...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 331,559
精华内容 132,623
关键字:

从ftp服务器下载文件