Code Bye

FTP下载不了文件的问题

 

因为业务需要,需要开发一个从ftp下载文件的功能。想着应该不难。用的是apache的commons的ftp组件。
本地建了一个测试的ftp服务器。在服务器的根目录有一个a.txt文件。

用ftp连接都没有问题。只是在下载的时候出现了问题。
以下是下载部分的代码,fileName是传进来的FTP上的文件名。由于一直是取不到数据,所以下面直接直接写死了文件名,但是也不行。ins一直是null,导致文件无法下载。各位做过的朋友烦请帮忙看看,是什么原因呢?

	public void loadFile(String fileName,String folderPath) {
		InputStream ins = null;
		fileName = "a.txt";
		try {
			ftpClient.setBufferSize(1024);    
			ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
			FileOutputStream fileOutputStream = new FileOutputStream(
					folderPath + fileName);
			ins = ftpClient.retrieveFileStream(fileName);//这里一直是null
			if (null != ins) {
				byte[] b = new byte[ins.available()];
				while ((ins.read(b)) != -1) {
					fileOutputStream.write(b);
				}
				fileOutputStream.close();
				ins.close();
				ftpClient.getReply();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

10分
为null那里只给了文件名啊,服务端的路径呢?
我现在怀疑是我的工作目录出问题了,登录到FTP上之后会跳转到指定目录。但这个目录是根目录,我现在传”/”、”//”、”\”都不行。
	public void connectServer(String ip, int port, String userName,
			String userPwd, String path) {
		ftpClient = new FTPClient();
		try {
			// 连接
			ftpClient.connect(ip, port);
			// 登录
			ftpClient.login(userName, userPwd);
			if (path != null && path.length() > 0) {
				// 跳转到指定目录
					ftpClient.changeWorkingDirectory(path);
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
引用 1 楼 w3226327 的回复:

为null那里只给了文件名啊,服务端的路径呢?

因为是FTP根目录,我只给了文件名。

以下代码就是问题代码。不知道为什么fclient.retrieveFileStream一直无法取出来
try {
			FTPClient fclient = new FTPClient();
			fclient.connect("127.0.0.1", 21);

			fclient.login("root", "root");
			System.out.println(fclient.isConnected());
			fclient.changeWorkingDirectory(null);
			fclient.setBufferSize(1024);    
			fclient.setFileType(FTP.BINARY_FILE_TYPE); 
			FileOutputStream fileOutputStream = new FileOutputStream("c:\a.txt");
			InputStream ins = null;
			ins = fclient.retrieveFileStream("20141201.txt");
			if (null != ins) {
				System.out.println("===========");
				byte[] b = new byte[ins.available()];
				while ((ins.read(b)) != -1) {
					fileOutputStream.write(b);
				}
				fileOutputStream.close();
				ins.close();
				fclient.getReply();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

10分
登录之后 先做一下list  看看结果
引用 5 楼 tianfang 的回复:

登录之后 先做一下list  看看结果

设置成被动模式就好了。但是现在问题很奇怪。测试debug模式的时候可以下载文件。但生产模式运行的时候就下载不了。http://bbs.csdn.net/topics/390944928?page=1#post-398618127


20分
以前搞过,现在忘记了,建议楼主一步一步排查,先看是否登录成功,再把当前目录和目录下的文件及文件夹都输出来。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明FTP下载不了文件的问题