这个方法在我本机中的配置,下载可以,没有任何问题,部署在公司的测试环境中
下载文件就会损坏
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = request.getParameter("filename");
String fileNameNew=request.getParameter("fileNameNew");
// String fileNameNe = URLEncoder.encode(fileNameN, "UTF-8");
// String fileNameN=URLDecoder.decode(fileNameNe, "UTF-8");
// fileNameN= new String(
// fileNameN.getBytes("ISO-8859-1"),
// "UTF-8");
// String fileNameNew = fileNameN.replaceAll(" ", "");
InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("ftp.properties");
Properties prot=new Properties();
prot.load(inputStream);
String hostName=prot.getProperty("ftp.ip");
String remoteDir=prot.getProperty("ftp.updir");
String userName=prot.getProperty("ftp.username");
String Pwd=prot.getProperty("ftp.pwd");
String prt=prot.getProperty("ftp.port");
// 初始表示下载失败
int port=Integer.parseInt(prt);
// 创建FTPClient对象
FTPClient ftp = new FTPClient();
try {
int reply;
// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.connect(hostName, port);
reply = ftp.getReplyCode();
/*
* 判断是否连接成功
*/
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
} else{
// 登录ftp
if (filename!=null && !filename.equals("")) {
if(ftp.login(userName, Pwd)){
// 转到指定下载目录
ftp.changeWorkingDirectory(remoteDir);
// 列出该目录下所有文件
FTPFile[] fs = ftp.listFiles();
// 遍历所有文件,找到指定的文件
for (FTPFile ff : fs) {
if (ff.getName().equals(filename)) {
// 根据绝对路径初始化文件
String name=new String(fileNameNew);
response.setHeader("Content-Disposition","attachment; filename="+name);
// 输出流
OutputStream is = response.getOutputStream();
response.setContentType("application/octet-stream");
// 下载文件
boolean success = ftp.retrieveFile(filename, is);
System.out.println(success);
is.flush();
is.close();
}
}
// 退出ftp
ftp.logout();
// 下载成功
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
}