1. 程式人生 > >ftp上傳下載-----打包下載、以流的形式傳到前臺頁面

ftp上傳下載-----打包下載、以流的形式傳到前臺頁面

package com.zhph.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import
java.util.UUID; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import
org.apache.log4j.Logger; import com.zhph.vo.cases.FileAttachment; public class FtpUtil { private static Logger logger = Logger.getLogger(FtpUtil.class.getName ()) ; private static FTPClient ftp; public static boolean connectFtpClient() throws Exception{ boolean flag=false; //ftp伺服器登入憑證
String ftpHost=ConfigHelper.getPropertiseValueFromContext("ftpHost");// FTP伺服器host int port=Integer.parseInt(ConfigHelper.getPropertiseValueFromContext("ftpPort"));// FTP伺服器埠 String username=ConfigHelper.getPropertiseValueFromContext("ftpUserName");// FTP登入賬號 String password=ConfigHelper.getPropertiseValueFromContext("ftpPassword");// FTP登入密碼 ftp = new FTPClient(); ftp.setControlEncoding("GBK"); int reply; ftp.setConnectTimeout(10000); ftp.connect(ftpHost, port);// 連線FTP伺服器 // 如果採用預設埠,可以使用ftp.connect(url)的方式直接連線FTP伺服器 ftp.login(username, password);// 登入 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); logger.info("FTP server refused connection."); return flag; } //設定PassiveMode傳輸 設為被動 ftp.enterLocalPassiveMode(); ftp.setFileType(FTPClient.BINARY_FILE_TYPE); flag=true; return flag; } /** * 關閉ftp連線 */ public static void closeFtp(){ if (ftp!=null && ftp.isConnected()) { try { ftp.logout(); ftp.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } /** * Description: 向FTP伺服器上傳檔案 * @Version 1.0 * @param path FTP伺服器儲存目錄 * @param filename 上傳到FTP伺服器上的檔名 * @param input 輸入流 * @return 成功返回true,否則返回false * */ public static boolean uploadFile( String path, // FTP伺服器儲存目錄 String filename, // 上傳到FTP伺服器上的檔名 InputStream input // 輸入流 ){ boolean result = false; try { if(connectFtpClient()){ if(!StringHelper.isEmptyString(path)){ String[] paths = path.split("/"); for(int i=0;i<paths.length;i++){ if(!ftp.changeWorkingDirectory(paths[i])){ ftp.makeDirectory(paths[i]); ftp.changeWorkingDirectory(paths[i]); } } }else{ ftp.makeDirectory(path); ftp.changeWorkingDirectory(path); } if(!ftp.storeFile(filename, input)){ logger.info("無讀寫許可權:"+filename); return result; } input.close(); result = true; } } catch (Exception e) { e.printStackTrace(); } finally { closeFtp(); } return result; } /** * ftp檔案下載 * ypg 2017-3-10 * @param request * @param response * @param txtFileDir */ public static void downFile(HttpServletRequest request, HttpServletResponse response,FileAttachment fileAttachment){ logger.info(new Date()+" 開始進入ftpDownload下載"); try { if(connectFtpClient()){ //檢索ftp目錄下所有的檔案,利用時間字串進行過濾 boolean dir = ftp.changeWorkingDirectory(fileAttachment.getFileAttachmentPath()); if (dir) { FTPFile[]fs = ftp.listFiles(); for(FTPFile f:fs) { if(f.getName().equals(fileAttachment.getFileAttachmentName())) { response.reset(); response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileAttachment.getFileAttachmentTitle().replaceAll(" ", "").getBytes("utf-8"), "iso8859-1")); response.addHeader("Content-Length", "" + f.getSize()); OutputStream os = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); ftp.retrieveFile(f.getName(),os); os.flush(); os.close(); logger.info(new Date()+" ftpDownload下載檔案成功"); } } } } } catch (Exception e) { e.printStackTrace(); logger.info(new Date()+" ftpDownload下載檔案發生錯誤"); } finally { closeFtp(); } } /** * ftp檔案打包zip下載 * ypg 2017-3-10 * @param request * @param response * @param txtFileDir */ public static void downZipFile(HttpServletRequest request, HttpServletResponse response,List<FileAttachment> fileAttachments){ logger.info(new Date()+" 開始進入ftpZipDownload下載"); File tempFile =null; ZipOutputStream out =null; String directory=Files_Utils_DG.getTempAbsolutePath(request, ConfigHelper.getPropertiseValueFromContext("temp.download.path")); File fileDirectory=new File(directory); try { tempFile = File.createTempFile(UUID.randomUUID().toString(), ".zip", fileDirectory); if(connectFtpClient()){ InputStream inputStream; byte[] buf = new byte[1024]; // Create the ZIP file // ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile)); out = new ZipOutputStream(new FileOutputStream(tempFile)); for(FileAttachment fileAttachment:fileAttachments){ //檢索ftp目錄下所有的檔案,利用時間字串進行過濾 boolean dir = ftp.changeWorkingDirectory(fileAttachment.getFileAttachmentPath()); if (dir) { FTPFile[]fs = ftp.listFiles(); for(FTPFile f:fs) { if(f.getName().equals(fileAttachment.getFileAttachmentName())) { out.putNextEntry(new ZipEntry(fileAttachment.getFileAttachmentTitle())); ftp.retrieveFile(f.getName(),out); out.closeEntry(); logger.info(new Date()+" ftpZipDownload打包檔案"+f.getName()); } } logger.info(new Date()+" ftpZipDownload下載檔案至"+directory); } } response.reset(); // 先去掉檔名稱中的空格,然後轉換編碼格式為utf-8,保證不出現亂碼,這個檔名稱用於瀏覽器的下載框中自動顯示的檔名 response.addHeader("Content-Disposition", "attachment;filename=" + new String(tempFile.getName().replaceAll(" ", "").getBytes("utf-8"), "iso8859-1")); response.addHeader("Content-Length", "" + tempFile.length()); response.setContentType("application/octet-stream"); OutputStream os = new BufferedOutputStream(response.getOutputStream()); inputStream = new BufferedInputStream(new FileInputStream(tempFile)); int len; while ((len = inputStream.read(buf)) > 0) { os.write(buf, 0, len); } os.flush(); //一定要關閉流 os.close(); inputStream.close(); logger.info(new Date()+" ftpZipDownload下載檔案成功:"+tempFile.getName()); } }catch (Exception e) { e.printStackTrace(); logger.info(new Date()+" ftpDownload下載檔案發生錯誤"); } finally { closeFtp(); if(out!=null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } logger.info("刪除檔案:"+tempFile.delete()); } } /** * ftp檔案下載展示 * ypg 2017-3-10 * @param request * @param response * @param txtFileDir */ public static void downFileDisplay(HttpServletRequest request, HttpServletResponse response,FileAttachment fileAttachment,String contenType){ logger.info(new Date()+" 開始進入ftpDownload下載"); try { if(connectFtpClient()){ //檢索ftp目錄下所有的檔案,利用時間字串進行過濾 boolean dir = ftp.changeWorkingDirectory(fileAttachment.getFileAttachmentPath()); if (dir) { FTPFile[]fs = ftp.listFiles(); for(FTPFile f:fs) { if(f.getName().equals(fileAttachment.getFileAttachmentName())) { response.setHeader("Content-Type",contenType); OutputStream os = new BufferedOutputStream(response.getOutputStream()); ftp.retrieveFile(f.getName(),os); os.flush(); os.close(); logger.info(new Date()+" ftpDownload下載檔案成功"); } } } } } catch (Exception e) { e.printStackTrace(); logger.info(new Date()+" ftpDownload下載檔案發生錯誤"); } finally { closeFtp(); } } }

相關推薦

ftp下載-----打包下載形式前臺頁面

package com.zhph.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.i

【2017-05-21】WebForm跨頁面值取值C#服務端跳轉頁面 Button的OnClientClick屬性Js中getAttribute和超鏈接點擊彈出警示框。

代碼 height delet update size 內存 客戶 bar win 一、跨頁面傳值和取值: 1、QueryString - url傳值,地址傳值 優缺點:不占用服務器內存;保密性差,傳遞長度有限。 通過跳轉頁面路徑進行傳值,方式: href="地址?ke

zxing生成二維碼頁面

@RequestMapping(“/makeQrCode”) public void madeQrCode(HttpServletResponse res,String content,Integer width,Integer height) throws IOException{

JDBC連線操作遊標形式來讀取資料

st=conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,java.sql.ResultSet.CONCUR_READ_ONLY); st.setFetchSize(Integer.MIN_VALUE); 、

java匯出檔案之Excel(CSV)下並形式輸出

<dependency>     <groupId>net.sourceforge.javacsv</groupId>     <artifactId>javacsv</artifactId>     <v

基於commons-net實現ftp創建文件夾下載功能

package use style pen 本地 try cal load 登陸 原文:http://www.open-open.com/code/view/1420774470187 package com.demo.ftp; import

java實現FTP(檔案)下載(檔案資料夾資料夾遞迴)刪除(檔案資料夾遞迴)

提示:必須先保證有在FTP上上傳、下載、刪除的許可權! 本文結構 ---- 先給出測試樣例(圖片版),再給出工具類程式碼(文字版)! 上傳測試 注意:.uploadFile(String remoteDir, String remoteFileName, F

使用指令碼在FTP下載檔案

由於最近勒索病毒變種又一次爆發,公司內部封鎖了TCP 445埠。導致原來通過檔案共享的方式上傳下載的計劃任務無法執行。所以,我開設了FTP伺服器來完成這個工作。 關於如何建立FTP伺服器,請看這裡 Windows 2012 R2上搭建IIS管理使用者的隔離模式FTP http://blog.51cto.c

php實現FTPFTP下載FTP移動FTP建立等

1. 使用PHP操作FTP-用法 <?php // 聯接FTP伺服器 $conn = ftp_connect(ftp.server.com); // 使用username和password登入 ftp_login($conn, “john”, “doe”);

Android中FTP下載(含進度)

package com.ftp; import java.io.File; import java.io.IOException; import java.util.LinkedList; import com.ftp.FTP.DeleteFileProgressListener; import com.

Java實現帶表單引數的檔案下載和檔案打包下載

準備工作 知識準備 SpringBoot Maven Spring Data JPA 工具準備 IDE:IDEA 說明 在此專案中, 我將檔案上傳的一些引數(例如上傳路徑、下載路徑、檔名等)儲存在資料庫當中,這樣更加靈活。當專案部署後,只需要更改資料庫中的資

Android通過ftp下載檔案

                在開發中有可能會遇到通過ftp協議來上傳和下載檔案,網上也有很多的帖子,但大部分都沒什麼用,通過參考其他和自己思考寫了兩個經測試可用的方法,這兩個方法需要一個commo

[ASP.NET]web實現用FTP下載檔案(附原始碼)

index.aspx 頁:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %> <!DOCTYPE html> <

android下使用FTP檔案下載檔案新建目錄刪除檔案工具類

package com.hisign.util; import android.text.TextUtils; import android.util.Log; import com.hisign.qrcebpro.app.Constant; import com.

Java FTP下載的實現

.net 一個 bin 上傳文件 pre 上傳下載 ole 切換 apach 昨天修改了一個接口,看到它涉及FTP的上傳與下載,用的是:org.apache.commons.net.ftp.FTPClient,它只支持FTP,不支持SFTP 總結下來如此使用: //創建對

老男孩教育每日一題-第95天-shell腳本知識點:書寫腳本完成ftp下載

ftp腳本 ftp上傳腳本 ftp下周腳本 每日一題 題目日常工作中經常用到FTP,進行文件的共享與下載,單對於有些不熟悉FTP命令行人員使用FTP進行共享文件管理,是一件很頭疼的事。而且FTP如果有些文件需要每天定時進行上傳或下載,人為重復相同工作也是沒有意義的因此如何編寫自動下載或上傳FT

ftp 下載整個目錄

linux下傳目錄 mirror DIRNAME上傳目錄 mirror -R DIRNAM下傳目錄方法一 > mget -d DIRNAME/*方法二 > mirror DIRNAME上傳目錄方法一 >mput -d DIRNAME/*方法二 >mirror -R DIRNAME下傳普

python之FTP下載

塊大小 對象 direct 實例 color 二進制文件 pass nbsp orb 1 # FTP操作 2 import ftplib 3 4 host = ‘192.168.20.191‘ 5 username = ‘ftpuser‘ 6 passwor

ftp下載至網站

service 使用 cannot cif 修改 網站 admin mage ready 完整的命令行模式解析! 1. 首先open 域名(Ip)形式即可 實例: open 60.205.45.115 2.後面輸入用戶名(主機名

高可用的Spring FTP下載工具類(已解決過程常見問題)

關於 package 輸入 .net rop inpu pasv for factory 前言 最近在項目中需要和ftp服務器進行交互,在網上找了一下關於ftp上傳下載的工具類,大致有兩種。   第一種是單例模式的類。   第二種是另外定義一個Service,直接通過