ftp下载文件转化为输入流

/**
	 * 取上传完整文件路径
	 * @param dir ftp定义的存储路径  例如 /jdyjs/jdyjs
	 * @param filename上传的文件名
	 * @return
	 * @throws Exception
	 */
	public static String getUploadFilePath(String dir, String filename) {
		byte[] bytes = null;
		Ydzf_UploadPdf ydzf_UploadPdf = new Ydzf_UploadPdf();
		FTPClient ftp = new FTPClient();
		ydzf_UploadPdf.initFtpServerParamsFromConfig();
		String path = "/"+dir+"/"+dir+"/"+filename;
		try {
			int reply;
			ftp.connect(ydzf_UploadPdf.getIp(), ydzf_UploadPdf.getPort());
			// 登录ftp
			ftp.login(ydzf_UploadPdf.getUsername(), ydzf_UploadPdf.getPassword());
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
			}
			// 转到指定下载目录
			if (path != null) {//验证是否有该文件夹,有就转到,没有创建后转到该目录下
				ftp.changeWorkingDirectory(path);//转到指定目录下
			}
			//2015/4/28 不需要遍历,改为直接用文件名取
			String remoteAbsoluteFile = toFtpFilename(path);
			InputStream in = null;
			// 下载文件
			ftp.setBufferSize(1024);
			ftp.setControlEncoding("UTF-8");
			ftp.setFileType(ftp.BINARY_FILE_TYPE);
			in = ftp.retrieveFileStream(remoteAbsoluteFile);
			bytes = input2byte(in);
			System.out.println("下载成功!" + bytes.length);
//			in.read(bytes);
			in.close();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return Base64.encodeBase64String(bytes);
	}
 /**
      * 文件转成 byte[] <一句话功能简述> <功能详细描述>
      *
      * @param inStream
      * @return
      * @throws IOException
      * @see [类、类#方法、类#成员]
      */
	public static byte[] input2byte(InputStream inStream) throws IOException {
		ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
		byte[] buff = new byte[inStream.available()];
		int rc = 0;
		while ((rc = inStream.read(buff, 0, 100)) > 0) {
			swapStream.write(buff, 0, rc);
		}
		byte[] in2b = swapStream.toByteArray();
		swapStream.close();
		return in2b;
	}
	/**转化输出的编码*/
	private static String toFtpFilename(String fileName) throws Exception {
		return new String(fileName.getBytes("GBK"),"ISO8859-1");
	}
public class Ydzf_UploadPdf {
	private String ip;// ftp服务器ip
	private int port;
	private String username;
	private String password;
	private String path;
	private static final String FTPCONFIG = "ftpConfiguration.xml";
	public static final String FileDownloadTempDir = ServletActionContext.getServletContext().getRealPath("/wenshu_pdf/");
	public void initFtpServerParamsFromConfig() {
		String xmlPath = BaseAction.class.getClassLoader().getResource("/").getPath() + FTPCONFIG;
		if(xmlPath.contains("%20"))
			xmlPath = xmlPath.replaceAll("%20", " ");
		System.out.println(xmlPath);
		Document doc = Dom4jUtils.File2Document(xmlPath);
		Element root = doc.getRootElement();
		this.ip = root.element("ip").getText();
		this.port = Integer.valueOf(root.element("port").getText());
		this.username = root.element("username").getText();
		this.password = root.element("password").getText();
		this.path = root.element("path").getText();
	}
ftpConfiguration.xml关于ftp的配置,可以在百度上查找很详细的 ftp默认的端口号是21,可以不去更改<?xml version="1.0" encoding="UTF-8"?>
<!-- 附件上传的FTP服务器配置 -->
<ftpConfig>
	<ip>127.0.0.1</ip>
	<port>21</port>
	<username>ftpuser</username>
	<password>12345678</password>
	<path>/ftpServer</path>
</ftpConfig>
时间: 2024-10-31 07:28:13

ftp下载文件转化为输入流的相关文章

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

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

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

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; 并没有解释其原因. 调

Qt利用FTP下载文件

自己封装的ftpCtrl类,测试正常下载文件. 原文:默默地EEerhttp://www.cnblogs.com/hebaichuanyeah/p/6083036.html ftpCtrl.h #ifndef FTPCTRL_H #define FTPCTRL_H #include <QFile> #include <QFtp> class FtpCtrl : public QObject { Q_OBJECT public: FtpCtrl(QObject *parent = 0

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(); 获取指定目录下的文件列表

【197】PowerShell 通过 FTP 下载文件

参考:使用 WGET 从FTP上下载文件 在 PowerShell 使用 wget2 工具,代码如下: wget2 ftp://user:[email protected]/1.jpg 其中 user 替换为远程 ftp 的用户名password 替换为远程 ftp 的密码