ftp的上传与单文件下载
生活随笔
收集整理的這篇文章主要介紹了
ftp的上传与单文件下载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、預覽(登錄根目錄下的report下存儲)
二、代碼
ftp參數
上傳
public static void up(File file,String filename, TimeFTPconfig timeFTPconfig){FTPClient client = new FTPClient() ;try {client.connect(timeFTPconfig.getHost(),timeFTPconfig.getPort()) ;boolean flag = client.login(timeFTPconfig.getUser(), timeFTPconfig.getPass()) ;if(flag){client.setFileType(FTP.BINARY_FILE_TYPE);//切換工作目錄client.changeWorkingDirectory("/report") ;InputStream in = new FileInputStream(file) ;client.storeFile(filename, in) ;}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}下載(由于這里是請求直接下載,所以返回一個輸入流,在控制層可以轉成輸出流進行寫出即可)
public static InputStream load(String urlstr, TimeFTPconfig timeFTPconfig){FTPClient client = new FTPClient() ;try {client.connect(timeFTPconfig.getHost(),timeFTPconfig.getPort()) ;boolean flag = client.login(timeFTPconfig.getUser(), timeFTPconfig.getPass()) ;if(flag){/*** ASCII傳輸方式 假定用戶正在拷貝的文件包含的簡單ASCII碼文本,* 如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便于把文件解釋成另外那臺計算機存儲文本文件的格式。* 但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件,這回導致文件損壞*///設置采用二進制傳輸方式下載,若采用默認的ascii傳輸方式下載可能導致文件損失client.setFileType(FTP.BINARY_FILE_TYPE);//切換當前目錄到xxclient.changeWorkingDirectory("/report") ;InputStream inputStream=client.retrieveFileStream(urlstr);//根據指定名稱獲取指定文件return inputStream;}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}輸入流轉輸出流 (IOUtils這個工具可以直接轉化,雙流轉化不需要File作為媒介)
org.apache.commons.io.IOUtils; 這個包下的 OutputStream os = response.getOutputStream(); IOUtils.copy(FtpClientUtil.load(urlstr,timeFTPconfig), os);控制層下載
public void downloadFile(){//查詢出ftp的配置TimeFTPconfig timeFTPconfig = sendReportService.getFtpConfig();// 打開輸出流try {HttpServletResponse response=ServletActionContext.getResponse();// 生成返回流,設置response的類型response.setContentType("application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename*=utf-8'zh_cn'"+URLEncoder.encode(namestr, "UTF-8") );//response.addHeader("Content-Disposition", "attachment; filename=\"" +namestr+ "\"");OutputStream os = response.getOutputStream();IOUtils.copy(FtpClientUtil.load(urlstr,timeFTPconfig), os);// 關閉流os.flush();os.close();logger.info(SessionUtil.getFromSession(Constants.LOGIN_EMAIL)+"下載已發送附件成功");} catch (IOException e) {logger.error(SessionUtil.getFromSession(Constants.LOGIN_EMAIL)+"下載已發送附件失敗,原因為:"+e.getMessage());e.printStackTrace();}}三、知識拓展
1、下載文件會出現中文亂碼
2、獲取ftp的文件
指定文件
InputStream inputStream=client.retrieveFileStream(urlstr); //urlstr 文件名文件列表
FTPFile[] listFiles = client.listFiles();3、流不用關閉
OutputStream的close是空實現,不用關閉
四、ftp假死?
在假死的語句前面加(讀寫流、獲取文件列表前面)
原因:
FTP有兩種模式:主動模式(active mode)和被動模式(passive mode)
默認情況下是啟動的主動模式。
兩種模式的詳細講解:https://blog.csdn.net/zhangyuan12805/article/details/71425385
總結
以上是生活随笔為你收集整理的ftp的上传与单文件下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种常见的JavaScript特效
- 下一篇: 分享996个实用的JavaScript特