您的位置:首页 > 运维架构 > Apache

利用Apache 实现FTp的上传和下载

2013-12-06 16:39 471 查看
在ftp上传时我遇到了很奇怪的问题:

上传中文名的文件在服务器上显示正常 ,可到浏览器上就变成了乱码,下载后文件也是正常的。不知道什么原因,修改浏览器编码也不管用,不知道各位朋友遇到这样的问题没,这是我的上传ftp服务器代码,供大家参考下

package com.wu;

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

/**
* @author wu
*
*/
public class Ftps {

public static void main(String[] args) {
ftpUpload("10.254.201.50", "21", "xxxx", "123456", "DIMS/UploadData", "C:\\Users\\Desktop\\", "12345新建文本文.txt");
downLoadFile("10.254.201.50", "21", "xxxx", "123456","DIMS/UploadData/12345新建文本文.txt","C:\\Users\\Desktop\\12345新建文本文.txt");

}
/**
* 通过ftp上传文件
* @param url ftp服务器地址 如: 192.168.1.110
* @param port 端口如 : 21
* @param username  登录名
* @param password   密码
* @param remotePath  上到ftp服务器的磁盘路径
* @param fileNamePath  要上传的文件路径
* @param fileName      要上传的文件名
* @return
*/
public static String ftpUpload(String url, String port, String username,String password, String remotePath, String fileNamePath,String fileName) {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
String returnMessage = "0";
try {
ftpClient.connect(url, Integer.parseInt(port));
boolean loginResult = ftpClient.login(username, password);
int returnCode = ftpClient.getReplyCode();
if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登录成功
ftpClient.setControlEncoding("GBK");
ftpClient.makeDirectory(remotePath);
// 设置上传目录
ftpClient.changeWorkingDirectory(new String(remotePath.getBytes("GBK"),"iso-8859-1"));
ftpClient.setBufferSize(1024);
//ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
fis = new FileInputStream(fileNamePath + fileName);
//注意文件名转码否则可能不能上传haiy中文文件名
ftpClient.storeFile(new String(fileName.getBytes("GBK"), "ISO-8859-1") , fis);

returnMessage = "1";   //上传成功
} else {// 如果登录失败
returnMessage = "0";
}

} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
//IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return returnMessage;
}

/**
* ftp下载文件
* @param remoteFileName --服务器上的文件名
* @param localFileName--本地文件名
*/
public static boolean downLoadFile(String url, String port, String username,String password,String remoteFileName,String localFileName){

FTPClient ftpClient = new FTPClient();
BufferedOutputStream buffOut=null;
boolean flag = true;//下载成功返回true
try {
ftpClient.connect(url, Integer.parseInt(port));
boolean loginResult = ftpClient.login(username, password);
int returnCode = ftpClient.getReplyCode();
if(loginResult && FTPReply.isPositiveCompletion(returnCode)){
buffOut=new BufferedOutputStream(new FileOutputStream(localFileName));
//注意编码 我刚开始没有编码 下载的文件会是空的
flag =  ftpClient.retrieveFile(new String(remoteFileName.getBytes("GBK"), "ISO-8859-1"), buffOut);
}else{
ftpClient.disconnect();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e1);
}finally{
try{
if(buffOut!=null){
buffOut.flush();
buffOut.close();
}
ftpClient.logout();
ftpClient.disconnect();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return flag;
}
}


所需jar包commons-net-3.0.1.jar、ftp4j-1.6.1.jar下载地址http://download.csdn.net/detail/yusewuhen/6669625




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: