最近在学习使用org.apache.commons.net.ftp.FTPClient进行上传时在客户端选择要上传的文件后取不到客户端路径,取到的是服务器的路径。下载时也是下载到服务器中而不是下载到客户端,其他的如删除、新建文件夹、重命名等都正常,请问是怎么回事,下面是代码。
在服务器上进行任何操作都是没问题的。 public boolean upload(String filename, String localname) {
boolean flag = false;
try {
boolean flag2 = connectServer();
if (flag2) {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(
FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh"); // 检查远程文件名是否已存在
String remoteFileName = filename.substring(filename
.lastIndexOf("/") + 1);
FTPFile[] files = ftpClient.listFiles(new String(remoteFileName
.getBytes("GBK"), "iso-8859-1"));
if (files.length == 1) {
System.out.println("远程文件名已存在");
flag = false;
} else { System.out.println(filename + "--" + localname);
// 设置文件类型(二进制)
// ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
File file = new File(filename);
InputStream in = new FileInputStream(file);
ftpClient.changeWorkingDirectory(localname.substring(0, localname.lastIndexOf("\\")));
File file2 = new File("f:/upload/"+localname);
flag = ftpClient.storeFile(file2.getName(), in);
in.close();
}
// out.close();
}
} catch (IOException e) {
// flag = false;
// TODO Auto-generated catch block
// //e.printStackTrace();
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}--------------------------------------------------------------------------------------------------------------
public boolean download(String remoteFile, String localFile) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
boolean flag = false;
try {
boolean flag2 = connectServer();
if (flag2) {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
FTPClientConfig conf = new FTPClientConfig(
FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh"); File file_in = new File(localFile);
FileOutputStream fos = new FileOutputStream(file_in);
BufferedOutputStream buffOut = new BufferedOutputStream(fos); flag = ftpClient.retrieveFile(directory + remoteFile, buffOut);
ftpClient.disconnect();
}
} catch (IOException ex) {
// flag = false;
System.out.println("not download");
System.out.println(ex);
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}
在服务器上进行任何操作都是没问题的。 public boolean upload(String filename, String localname) {
boolean flag = false;
try {
boolean flag2 = connectServer();
if (flag2) {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(
FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh"); // 检查远程文件名是否已存在
String remoteFileName = filename.substring(filename
.lastIndexOf("/") + 1);
FTPFile[] files = ftpClient.listFiles(new String(remoteFileName
.getBytes("GBK"), "iso-8859-1"));
if (files.length == 1) {
System.out.println("远程文件名已存在");
flag = false;
} else { System.out.println(filename + "--" + localname);
// 设置文件类型(二进制)
// ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
File file = new File(filename);
InputStream in = new FileInputStream(file);
ftpClient.changeWorkingDirectory(localname.substring(0, localname.lastIndexOf("\\")));
File file2 = new File("f:/upload/"+localname);
flag = ftpClient.storeFile(file2.getName(), in);
in.close();
}
// out.close();
}
} catch (IOException e) {
// flag = false;
// TODO Auto-generated catch block
// //e.printStackTrace();
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}--------------------------------------------------------------------------------------------------------------
public boolean download(String remoteFile, String localFile) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
boolean flag = false;
try {
boolean flag2 = connectServer();
if (flag2) {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
FTPClientConfig conf = new FTPClientConfig(
FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh"); File file_in = new File(localFile);
FileOutputStream fos = new FileOutputStream(file_in);
BufferedOutputStream buffOut = new BufferedOutputStream(fos); flag = ftpClient.retrieveFile(directory + remoteFile, buffOut);
ftpClient.disconnect();
}
} catch (IOException ex) {
// flag = false;
System.out.println("not download");
System.out.println(ex);
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}
解决方案 »
- 网站之间是如何通信
- Spring框架技术的应用
- javamail发送邮件问题
- 使用struts 的LookupDispatchAction 编译出现“Unable to compile class for JSP”错误
- struts中多个BUTTON提交表单问题!
- 高手帮我看看这段程序错在哪里?
- 怎样让查询错误的姓名,显示出错误提示信息
- eclipse为什么debug打上断点后,运行到断点那行不变色
- java 文件下载谷歌可以IE不可以
- weblog 启动webservice 报错
- JSP中使用dom4j解析XML文件,路径出错的问题
- 刚学习jsp,调用程序时出现HTTP Status 500 的错误,求高手解决
File file = new File(filename);
InputStream in = new FileInputStream(file);
看出in是remotefile而
flag = ftpClient.storeFile(file2.getName(), in);
中in应该使用localfile同理,查看下download是否参数传递有错