您的位置:首页 > 编程语言 > Java开发

jaVA使用FTP上传下载文件的问题

2008-11-05 23:50 1056 查看
为了实现 FTP上传下载,大概试了两个方法

sun.net.ftp.FtpClient

org.apache.commons.net

一开始使用sun.net.ftp.FtpClient,结果发现唯一的问题是它不可以创建目录,

随后试了下org.apache.commons.net,创建目录倒是没有问题,不过用FTPClient 的storeFile方法存储文件的时候发现文本文件正常,但是存储word 或者是压缩包等等的文件就会损坏,由于时间紧迫,网上也没有找到有效的解决办法,结果最后还是采用sun.net.ftp.FtpClient方法

sun.net.ftp.FtpClient中的sendserver方法可以发送FTP服务器的命令,从而可以通过它发送XMDK命令来创建目录

值得注意的是使用sendserver发送命令后,还应该要解析发回来的返回信息。并不是一个命令发送完后就可以发送下一个命令。有时候要等待到就绪状态才行。

使用ftpclient.readServerResponse来接收服务器发回来的执行结果

附代码:

sun.net.ftp.FtpClient:

// 连接ftp服务器

private void connectServer(String server, String user, String password, String path) throws IOException {

ftpClient_sun = new FtpClient();

ftpClient_sun = new FtpClient();

ftpClient_sun.openServer(server,22);

ftpClient_sun.login(user, password);

// path是FTP服务下主目录的子目录

if (path.length() != 0)

ftpClient_sun.cd(path);

ftpClient_sun.sendServer("XMKD test\r\n");

ftpClient_sun.readServerResponse();

ftpClient_sun.cd("test");

// 用2进制上传

ftpClient_sun.binary();

System.out.println("登录成功");

}

// 上传文件;并返回上传文件的信息

private String upload(FormFile formFile) throws Exception {

TelnetOutputStream os = null;

InputStream is = null;

try {

os = ftpClient_sun.put("upftp"+getName()+"." + getExtName(formFile.getFileName()));

is = formFile.getInputStream();

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

}

} finally {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

}

return "上传文件成功!";

}

/**

* 下载文件

*

* @param fileName

* FormFile对象

* @param HttpServletResponse

* HTTP响应

* @throws IOException

*/

private void download(String fileName, HttpServletResponse response) throws IOException {

TelnetInputStream ftpIn = ftpClient_sun.get(fileName);

response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

OutputStream out = null;

try {

out = response.getOutputStream();

IOUtils.copy(ftpIn, out);

} finally {

if (ftpIn != null) {

ftpIn.close();

}

}

}

/**

* 展示图片 *

* @param fileName

* FormFile对象

* @param HttpServletResponse

* HTTP响应

* @throws IOException

*/

private void show(String fileName, HttpServletResponse response) throws IOException {

TelnetInputStream ftpIn = ftpClient_sun.get(fileName);

OutputStream out = null;

try {

out = response.getOutputStream();

IOUtils.copy(ftpIn, out);

} finally {

if (ftpIn != null) {

ftpIn.close();

}

}

}

org.apache.commons.net

// 连接ftp服务器

private void connectServer(String server, String user, String password, String path) throws IOException {

try {

ftpClient = new FTPClient();

ftpClient.connect(server);

ftpClient.login(user, password);

System.out.println(" login success !!! ");

if (path.length() != 0) {

boolean flag = ftpClient.changeWorkingDirectory(path);

if (flag) {

System.out.println(" set working directory successful !!! ");

}else

{

ftpClient.makeDirectory(path);

ftpClient.changeWorkingDirectory(path);

}

}

}

catch (IOException e) {

System.out.println(" not login !!! ");

System.out.println(e.getMessage());

}

}

// 上传文件;并返回上传文件的信息

private String upload(FormFile formFile) throws Exception {

InputStream fis = formFile.getInputStream();

// 上传本地文件到服务器上(文件名以'temp_'开头,当上传完毕后,名字改为正式名)

boolean flag = ftpClient.storeFile("upftp"+getName()+"."+getExtName(formFile.getFileName()), fis);

if (flag) {

System.out.println(" upload success !!! ");

}

// 关闭文件流

fis.close();

return "上传文件成功!";

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