ftp 下載
阿新 • • 發佈:2018-11-08
import org.apache.commons.net.ftp.FTPClient;
/**
*
* ftp檔案下載
* @throws Exception
*
*/
@GetMapping("/download")
public void download(HttpServletResponse response) throws Exception {
String hostname="136.219.100.213";
Integer port=21;
String username="shop";
String password="000";
String remotePath="/upload/file/201710";//相對路徑 /upload/image/201710
String filename="2017032211.pdf";
FTPClient ftp= new FTPClient();
ftp.connect(hostname, port);// 連線FTP伺服器 如果採用預設埠,可以使用ftp.connect(url)的方式直接連線FTP伺服器
ftp.login(username, password);// 登入ftp
ftp.setControlEncoding("UTF-8"); // 設定字元編碼
ftp.setFileType(FTPClient.BINARY_FILE_TYPE); // 設定檔案傳輸格式
ftp.enterLocalPassiveMode();//防止埠沒有開啟
int reply = ftp.getReplyCode();// 以2開頭的都表示登陸成功
if (FTPReply.isPositiveCompletion(reply)) {
// 轉到指定下載目錄
if (!ftp.changeWorkingDirectory(remotePath)) {
String[] paths = StringUtils.split(remotePath, "/");
String p = "/";
ftp.changeWorkingDirectory(p);
for (String s : paths) {
p += s + "/";
if (!ftp.changeWorkingDirectory(p)) {
ftp.makeDirectory(s);
ftp.changeWorkingDirectory(p);
}
}
}
FTPFile[] listFiles = ftp.listFiles();//列出所有的檔案
for (FTPFile ftpFile: listFiles ) {
if (ftpFile.getName().equals(filename)) {
if (ftpFile.isFile()) {
//根據檔名下載FTP伺服器上的檔案
//第一種觸發瀏覽器下載
InputStream ins=ftp.retrieveFileStream(ftpFile.getName());
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int bufsize = 0;
while ((bufsize = ins.read(buf, 0, buf.length)) != -1) {
byteOut.write(buf, 0, bufsize);
}
byte[] buffer = byteOut.toByteArray();
byteOut.close();
ins.close();
String fileSuffixName= filename.substring(filename.lastIndexOf(".")+1);
response.reset(); //清除快取
response.setContentType("application/" +fileSuffixName + ";" +"charset = UTF-8"); //設定字符集和檔案字尾名
response.setHeader("Content-Disposition","attachment; filename=" +filename); // 設定檔名稱
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(buffer);
toClient.flush();
toClient.close();
//第二種下載到指定目錄
String localPath="D:"+File.separator+"program_file"+File.separator+"FTP_file";//"D:"+File.separator+"program_file"+File.separator+"FTP_file";
File lFile = new File(localPath);
lFile.mkdir(); // 如果檔案所在的資料夾不存在就建立
FileOutputStream fos = new FileOutputStream(localPath+File.separator+filename);
ftp.retrieveFile(ftpFile.getName(), fos);
fos.flush(); // 將緩衝區中的資料全部寫出
fos.close(); // 關閉流
}
}
}
ftp.logout();// 退出ftp
if (ftp.isConnected()) {
ftp.disconnect();
}
} else{
ftp.disconnect();
}
}
/**
*
* ftp檔案下載
* @throws Exception
*
*/
@GetMapping("/download")
public void download(HttpServletResponse response) throws Exception {
String hostname="136.219.100.213";
Integer port=21;
String username="shop";
String remotePath="/upload/file/201710";//相對路徑 /upload/image/201710
String filename="2017032211.pdf";
FTPClient ftp= new FTPClient();
ftp.connect(hostname, port);// 連線FTP伺服器 如果採用預設埠,可以使用ftp.connect(url)的方式直接連線FTP伺服器
ftp.login(username, password);// 登入ftp
ftp.setFileType(FTPClient.BINARY_FILE_TYPE); // 設定檔案傳輸格式
ftp.enterLocalPassiveMode();//防止埠沒有開啟
int reply = ftp.getReplyCode();// 以2開頭的都表示登陸成功
if (FTPReply.isPositiveCompletion(reply)) {
// 轉到指定下載目錄
if (!ftp.changeWorkingDirectory(remotePath)) {
String[] paths = StringUtils.split(remotePath, "/");
ftp.changeWorkingDirectory(p);
for (String s : paths) {
p += s + "/";
if (!ftp.changeWorkingDirectory(p)) {
ftp.makeDirectory(s);
ftp.changeWorkingDirectory(p);
}
}
}
FTPFile[] listFiles = ftp.listFiles();//列出所有的檔案
for (FTPFile ftpFile: listFiles ) {
if (ftpFile.getName().equals(filename)) {
if (ftpFile.isFile()) {
//根據檔名下載FTP伺服器上的檔案
//第一種觸發瀏覽器下載
InputStream ins=ftp.retrieveFileStream(ftpFile.getName());
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int bufsize = 0;
while ((bufsize = ins.read(buf, 0, buf.length)) != -1) {
byteOut.write(buf, 0, bufsize);
}
byte[] buffer = byteOut.toByteArray();
byteOut.close();
ins.close();
String fileSuffixName= filename.substring(filename.lastIndexOf(".")+1);
response.reset(); //清除快取
response.setContentType("application/" +fileSuffixName + ";" +"charset = UTF-8"); //設定字符集和檔案字尾名
response.setHeader("Content-Disposition","attachment; filename=" +filename); // 設定檔名稱
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(buffer);
toClient.flush();
toClient.close();
//第二種下載到指定目錄
String localPath="D:"+File.separator+"program_file"+File.separator+"FTP_file";//"D:"+File.separator+"program_file"+File.separator+"FTP_file";
File lFile = new File(localPath);
lFile.mkdir(); // 如果檔案所在的資料夾不存在就建立
FileOutputStream fos = new FileOutputStream(localPath+File.separator+filename);
ftp.retrieveFile(ftpFile.getName(), fos);
fos.flush(); // 將緩衝區中的資料全部寫出
fos.close(); // 關閉流
}
}
}
ftp.logout();// 退出ftp
if (ftp.isConnected()) {
ftp.disconnect();
}
} else{
ftp.disconnect();
}
}