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實現FTP上傳、FTP下載、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,直接通過