java操作VSFTPD入門

廢話不多說,直接上代碼

1,ftpClient的jar       

<dependency>
     <groupId>commons-net</groupId>
     <artifactId>commons-net</artifactId>
     <version>3.3</version>
</dependency>

 2,測試代碼

/**
 * 測試代碼
 * @author reyco
 */
public class Test {
	public static void main(String[] args) {
		FTPClient fc = null;
		try {
			//創建ftp客戶端
			fc = new FTPClient();
			//設置連接地址和端口
			fc.connect("192.168.2.101", 21);
			//設置用戶和密碼
			fc.login("ftpuser", "123456");
			//設置文件類型
			fc.setFileType(FTP.BINARY_FILE_TYPE);
			//上傳
			boolean flag = fc.storeFile("a.jpg", new FileInputStream(new File("D:/test/1.jpg")));
			if(flag)
				System.out.println("上傳成功...");
			else
				System.out.println("上傳失敗...");
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//關閉連接
			if(null != fc) {
				try {
					fc.disconnect();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 3,使用spring,springmvc

        1,FTPUtil.java      

/**
 * ftp上傳下載工具類
 */
public class FtpUtil {

	/**
	 * Description: 向FTP服務器上傳文件
	 * 
	 * @param host
	 *            FTP服務器hostname
	 * @param port
	 *            FTP服務器端口
	 * @param username
	 *            FTP登錄賬號
	 * @param password
	 *            FTP登錄密碼
	 * @param basePath
	 *            FTP服務器基礎目錄
	 * @param filePath
	 *            FTP服務器文件存放路徑。例如分日期存放:/2015/01/01。文件的路徑爲basePath+filePath
	 * @param filename
	 *            上傳到FTP服務器上的文件名
	 * @param input
	 *            輸入流
	 * @return 成功返回true,否則返回false
	 */
	public static boolean uploadFile(String host, int port, String username, String password, String basePath,
			String filePath, String filename, InputStream input) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);// 連接FTP服務器
			// 如果採用默認端口,可以使用ftp.connect(host)的方式直接連接FTP服務器
			ftp.login(username, password);// 登錄
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			// 切換到上傳目錄
			if (!ftp.changeWorkingDirectory(basePath + filePath)) {
				// 如果目錄不存在創建目錄
				String[] dirs = filePath.split("/");
				String tempPath = basePath;
				for (String dir : dirs) {
					if (null == dir || "".equals(dir))
						continue;
					tempPath += "/" + dir;
					if (!ftp.changeWorkingDirectory(tempPath)) {
						if (!ftp.makeDirectory(tempPath)) {
							return result;
						} else {
							ftp.changeWorkingDirectory(tempPath);
						}
					}
				}
			}
			// 設置上傳文件的類型爲二進制類型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			// 上傳文件
			if (!ftp.storeFile(filename, input)) {
				return result;
			}
			input.close();
			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}

	/**
	 * Description: 從FTP服務器下載文件
	 * 
	 * @param host
	 *            FTP服務器hostname
	 * @param port
	 *            FTP服務器端口
	 * @param username
	 *            FTP登錄賬號
	 * @param password
	 *            FTP登錄密碼
	 * @param remotePath
	 *            FTP服務器上的相對路徑
	 * @param fileName
	 *            要下載的文件名
	 * @param localPath
	 *            下載後保存到本地的路徑
	 * @return
	 */
	public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
			String fileName, String localPath) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);
			// 如果採用默認端口,可以使用ftp.connect(host)的方式直接連接FTP服務器
			ftp.login(username, password);// 登錄
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			ftp.changeWorkingDirectory(remotePath);// 轉移到FTP服務器目錄
			FTPFile[] fs = ftp.listFiles();
			for (FTPFile ff : fs) {
				if (ff.getName().equals(fileName)) {
					File localFile = new File(localPath + "/" + ff.getName());

					OutputStream is = new FileOutputStream(localFile);
					ftp.retrieveFile(ff.getName(), is);
					is.close();
				}
			}

			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}

	public static void main(String[] args) throws FileNotFoundException {
		InputStream is = new FileInputStream("E:/timg.jpg");
		boolean result = FtpUtil.uploadFile("192.168.2.101", 21, "ftpuser", "ftpuser", "/home/ftpuser", "/",
				"qqq.jpg", is);
		if (result)
			System.out.println("上傳成功");
		else
			System.out.println("上傳失敗");
	}
}

     service

@Service
public class UploadServiceImpl{

	@Override
	public boolean upload(MultipartFile file) throws IOException {
		String fileName = UUID.randomUUID()+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
		return FtpUtil.uploadFile("192.168.2.101", 21, ftpuser, ftpuser, "/home/ftpuser", "/", fileName, file.getInputStream());
	}

}

  controller              

@Controller
public class UploadController {
	@Resource
	private UploadService uploadService;
	@RequestMapping("upload")
	public String upload(MultipartFile file) {
		try {
			boolean result = uploadService.upload(file);
			if(result){
				return "/success.jsp";
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "/error.jsp";
	}
}

 

 

 

   

         

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章