请问客户端的文件夹上传到FTP服务器 以及下载到本地 的有关问题
请教客户端的文件夹上传到FTP服务器 以及下载到本地 的问题
我在客户端打开JSP页面,想把我本地的一个文件夹上传到FTP服务器上去,
可是上传失败,报的错误是“此文件或文件夹有误或不存在!”
但是要是直接在服务器上跑这个程序的话,可以正常上传,就是在客户端跑的时候,
想把客户端的一个文件上传到服务器的时候报错误!
还有就是我下载的时候,却保存在了服务器的盘符下,而不是保存在客户单的本地路径。
我的代码哪里写的不对啊,请帮忙指正!
谢谢
代码如下:
我在客户端打开JSP页面,想把我本地的一个文件夹上传到FTP服务器上去,
可是上传失败,报的错误是“此文件或文件夹有误或不存在!”
但是要是直接在服务器上跑这个程序的话,可以正常上传,就是在客户端跑的时候,
想把客户端的一个文件上传到服务器的时候报错误!
还有就是我下载的时候,却保存在了服务器的盘符下,而不是保存在客户单的本地路径。
我的代码哪里写的不对啊,请帮忙指正!
谢谢
代码如下:
- Java code
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.ArrayList; import java.util.StringTokenizer; import sun.net.TelnetInputStream; import sun.net.ftp.FtpClient; /** * 对ftp进行上传、下载文件夹操作 * */ public class Ftp { // ftp服务器的IP地址 private String ip = "127.0.0.1"; // 用户名 private String username = "test"; // 密码 private String password = "test"; // 需要上传的目录,带绝对路径 private String localfilefullname = ""; FtpClient ftpclient = null; OutputStream os = null; FileInputStream is = null; /** * 取得参数值 * * @param serverIP 上传IP * @param username 用户名 * @param password 密码 */ public Ftp(String serverIP,String username, String password) { //IP this.ip = serverIP; //用户名 this.username = username; //密码 this.password = password; } /** * 检查文件夹是否存在 * * @param dir * @param ftpclient * @return */ private boolean isdirexist(String dir, FtpClient ftpclient)throws Exception { try { ftpclient.cd(dir); } catch (Exception e) { return false; } return true; } /** * ftp上传 * * @param prefix 创建的文件夹名 * @param localfilefullname 上传的源文件夹 * @return */ public boolean upload(String prefix,String localfilefullname)throws Exception { this.localfilefullname = localfilefullname; try { String savefilename = localfilefullname; // 新建一个ftp客户端连 ftpclient = new FtpClient(); ftpclient.openServer(this.ip); ftpclient.login(this.username, this.password); // 打开本地待上传的文件 File file_in = new File(savefilename); processfile(prefix,file_in, ftpclient); if (is != null) { is.close(); } if (os != null) { os.close(); } if (ftpclient != null) { ftpclient.closeServer(); } return true; } catch (Exception e) { e.printStackTrace(); System.err.println("exception e in ftp upload(): " + e.toString()); return false; } finally { if (is != null) { is.close(); } if (os != null) { os.close(); } if (ftpclient != null) { ftpclient.closeServer(); } } } /** * 用递归算法来上传文件 * * @param prefix 创建的文件夹名 * @param source 路径 * @param ftpclient * @throws exception */ private void processfile(String prefix,File source, FtpClient ftpclient)throws Exception { if (source.exists()) { if (source.isDirectory()) { //对文件路径进行转义 String path = prefix + source.getPath().substring(localfilefullname.length()).replace("\\", "/"); if (!isdirexist(path, ftpclient)) { //创建文件夹 createdir(path, ftpclient); } File sourcefile[] = source.listFiles(); for (int i = 0; i < sourcefile.length; i++) { if (sourcefile[i].exists()) { if (sourcefile[i].isDirectory()) { this.processfile(prefix,sourcefile[i], ftpclient); } else { ftpclient.cd(cheangpath(prefix,sourcefile[i].getPath())); ftpclient.binary(); os = ftpclient.put(sourcefile[i].getName()); byte[] bytes = new byte[1024]; is = new FileInputStream(sourcefile[i]); // 开始复制 int c; // 暂未考虑中途终止的情况 while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } is.close(); os.close(); } } } }else{ ftpclient.cd(cheangpath(prefix,source.getPath())); ftpclient.binary(); os = ftpclient.put(source.getName()); byte[] bytes = new byte[1024]; is = new FileInputStream(source); // 开始复制 int c; // 暂未考虑中途终止的情况 while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } is.close(); os.close(); } } else { throw new Exception("此文件或文件夹[" + source.getName() + "]有误或不存在!"); } } /** * 创建文件夹 * * @param dir * @param ftpclient * @throws exception */ private void createdir(String dir, FtpClient ftpclient) throws Exception { ftpclient.ascii(); StringTokenizer s = new StringTokenizer(dir, "/"); s.countTokens(); String pathname = ""; while (s.hasMoreElements()) { pathname = pathname + "/" + (String) s.nextElement(); try { ftpclient.sendServer("mkd " + pathname + "\r\n");// 如果服务器上有该目录,不会被创建 } catch (Exception e) { e = null; } ftpclient.readServerResponse(); } ftpclient.binary(); } /** * 获取当前的ftp路径 * * @param prefix * @param path * @return */ private String cheangpath(String prefix,String path) throws Exception { path = path.substring(localfilefullname.length()).replace("\\", "/"); if ("".equals(path)) { path = "/"; } else { path = path.substring(0, path.lastIndexOf("/") + 1); } path = prefix + path; return path; } /** * 递归算法,取得文件的字节大小 * * @param strName 文件名带绝对路径 * @return */ public Long getSize(String strName) { Long TotalSize = 0L; File f = new File(strName); if (f.isFile()){ return f.length(); }else { if (f.isDirectory()) { File[] contents = f.listFiles(); for (int i = 0; i < contents.length; i++) { if (contents[i].isFile()) TotalSize += contents[i].length(); else { if (contents[i].isDirectory()) TotalSize += getSize(contents[i].getPath()); } } } } return TotalSize; }