當前位置:首頁 » 文件管理 » 拋FTP

拋FTP

發布時間: 2024-06-10 07:32:03

❶ 公司要求做一個java和jsp怎麼實現ftp上傳的功能模塊,我沒有做過,誰有講得細一點的文章或網站。

form表單提交文件,建議用smartupload上傳,暫存在web伺服器目錄下,然後稍微一下下面的代碼,ftp上傳後,刪除暫存文件,ok
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.StringTokenizer;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

/**
* Ftp 服務類,對Apache的commons.net.ftp進行了包裝<br>
* 依賴庫文件:commons-net-1.4.1.jar
*
* @version 1.0 2008-02-18
* @author huchao@jbsoft
*/
public class FtpService {

public FtpService(String serverAddr, String lsenport, String userName,
String pswd) {
this.ftpServerAddress = serverAddr;
this.port = Integer.parseInt(lsenport);
this.user = userName;
this.password = pswd;
}

/**
* FTP 伺服器地址
*/
private String ftpServerAddress = null;
/**
* FTP 服務埠
*/
private int port = 21;
/**
* FTP 用戶名
*/
private String user = null;
/**
* FTP 密碼
*/
private String password = null;
/**
* FTP 數據傳輸超時時間
*/
private int timeout = 0;
/**
* 異常:登錄失敗
*/
private final I2HFException EXCEPTION_LOGIN = new I2HFException("COR101",
"FTP伺服器登錄失敗");
/**
* 異常:文件傳輸失敗
*/
private final I2HFException EXCEPTION_FILE_TRANSFER = new I2HFException(
"COR010", "FTP文件傳輸失敗");
/**
* 異常:IO異常
*/
private final I2HFException EXCEPTION_GENERAL = new I2HFException("COR010",
"FTP IO 異常");
private static final Logger logger = Logger.getLogger(FtpService.class);

/**
* 初始化FTP連接,並進行用戶登錄
*
* @return FTPClient
* @throws I2HFException
*/
public FTPClient initConnection() throws I2HFException {
FTPClient ftp = new FTPClient();
try {
// 連接到FTP
ftp.connect(ftpServerAddress, port);
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
throw new I2HFException("COR010", "FTP伺服器連接失敗");
}
// 登錄
if (!ftp.login(user, password)) {
throw EXCEPTION_LOGIN;
}
// 傳輸模式使用passive
ftp.enterLocalPassiveMode();
// 設置數據傳輸超時時間
ftp.setDataTimeout(timeout);
logger.info("FTP伺服器[" + ftpServerAddress + " : " + port + "]登錄成功");
} catch (I2HFException te) {
logger.info(te.errorMessage, te);
throw te;
} catch (IOException ioe) {
logger.info(ioe.getMessage(), ioe);
throw EXCEPTION_LOGIN;
}
return ftp;
}

/**
* 設置傳輸方式
*
* @param ftp
* @param binaryFile
* true:二進制/false:ASCII
* @throws I2HFException
*/
public void setTransferMode(FTPClient ftp, boolean binaryFile)
throws I2HFException {
try {
if (binaryFile) {
ftp.setFileType(FTP.BINARY_FILE_TYPE);
logger.info("FTP文件傳輸方式為:二進制");
} else {
ftp.setFileType(FTP.ASCII_FILE_TYPE);
logger.info("FTP文件傳輸方式為:ASCII");
}
} catch (IOException ex) {
logger.info(ex.getMessage(), ex);
throw EXCEPTION_GENERAL;
}
}

/**
* 在當前工作目錄下建立多級目錄結構
*
* @param ftp
* @param dir
* @throws I2HFException
*/
public void makeMultiDirectory(FTPClient ftp, String dir)
throws I2HFException {
try {
StringBuffer fullDirectory = new StringBuffer();
StringTokenizer toke = new StringTokenizer(dir, "/");
while (toke.hasMoreElements()) {
String currentDirectory = (String) toke.nextElement();
fullDirectory.append(currentDirectory);
ftp.makeDirectory(fullDirectory.toString());
if (toke.hasMoreElements()) {
fullDirectory.append('/');
}
}
} catch (IOException ex) {
logger.info(ex.getMessage(), ex);
throw EXCEPTION_GENERAL;
}
}

/**
* 更改伺服器當前路徑
*
* @param ftp
* @param dir
* @throws I2HFException
*/
public void changeWorkingDirectory(FTPClient ftp, String dir)
throws I2HFException {
try {
if (!ftp.changeWorkingDirectory(dir)) {
throw new I2HFException("COR010", "目錄[ " + dir + "]進入失敗");
}
} catch (I2HFException tfe) {
logger.info(tfe.errorMessage, tfe);
throw tfe;
} catch (IOException ioe) {
logger.info(ioe.getMessage(), ioe);
throw EXCEPTION_GENERAL;
}
}

/**
* 上傳文件到FTP伺服器
*
* @param ftp
* @param localFilePathName
* @param remoteFilePathName
* @throws I2HFException
*/
public void uploadFile(FTPClient ftp, String localFilePathName,
String remoteFilePathName) throws I2HFException {
InputStream input = null;
try {
input = new FileInputStream(localFilePathName);
boolean result = ftp.storeFile(remoteFilePathName, input);
if (!result) {
// 文件上傳失敗
throw EXCEPTION_FILE_TRANSFER;
}
logger.info("文件成功上傳到FTP伺服器");
} catch (I2HFException tfe) {
logger.info(tfe.getMessage(), tfe);
throw tfe;
} catch (IOException ioe) {
logger.info(ioe.getMessage(), ioe);
throw EXCEPTION_FILE_TRANSFER;
} finally {
try {
if (input != null) {
input.close();
}
} catch (IOException ex) {
logger.info("FTP對象關閉異常", ex);
}
}
}

/**
* 下載文件到本地
*
* @param ftp
* @param remoteFilePathName
* @param localFilePathName
* @throws I2HFException
*/
public void downloadFile(FTPClient ftp, String remoteFilePathName,
String localFilePathName) throws I2HFException {
boolean downloadResult = false;
OutputStream output = null;
try {
output = new FileOutputStream(localFilePathName);
downloadResult = ftp.retrieveFile(remoteFilePathName, output);
if (!downloadResult) {
// 如果是文件不存在將異常拋出
throw new I2HFException("COR011", "文件不存在");
}
logger.info("文件成功從FTP伺服器下載");
} catch (I2HFException tfe) {
logger.error(tfe.getMessage(), tfe);
throw tfe;
} catch (IOException ex) {
logger.error(ex.getMessage(), ex);
throw EXCEPTION_FILE_TRANSFER;
} finally {
try {
if (output != null) {
output.close();
}
if (!downloadResult) {
new File(localFilePathName).delete();
}
} catch (IOException ex) {
logger.error("FTP對象關閉異常", ex);
}
}
}

/**
* Method setFtpServerAddress.
*
* @param ftpServerAddress
* String
*/
public void setFtpServerAddress(String ftpServerAddress) {
this.ftpServerAddress = ftpServerAddress;
}

/**
* Method setUser.
*
* @param user
* String
*/
public void setUser(String user) {
this.user = user;
}

/**
* Method setPassword.
*
* @param password
* String
*/
public void setPassword(String password) {
this.password = password;
}

/**
* Method setTimeout.
*
* @param timeout
* String
*/
public void setTimeout(String timeout) {
try {
this.timeout = Integer.parseInt(timeout);
} catch (NumberFormatException ex) {
// 默認超時時間500毫秒
this.timeout = 500;
}
}

/**
* Method setPort.
*
* @param port
* String
*/
public void setPort(String port) {
try {
this.port = Integer.parseInt(port);
} catch (NumberFormatException ex) {
// 默認埠21
this.port = 21;
}
}
}
=====================================
jsp上傳部分
===================================
<form method="post" name="uploadform" id="uploadform" action="upload" ENCTYPE="multipart/form-data">

<input type="hidden" name="service" value="com.jbsoft.i2hf.corpor.services.CstBatchBizServices.exclUpload"/>
<table cellspacing="0" cellpadding="0">
<tr>
<td width="20%" align="right">上傳本地文件:</td>
<td width="80%"><input class="" style="width:300px" type="file" width="300px" name="exclname" id="exclname"/></td>
</tr>
</table>
</form>
============================================
上傳的servlet用的是smartupload
,部分代碼可以參考一下:
==========================================
SmartUpload su = new SmartUpload();
su.setCharset("UTF-8");
su.initialize(getServletConfig(), request, response);
su.setMaxFileSize(10240000);
su.setTotalMaxFileSize(102400000);
su.setAllowedFilesList("xls");
su.upload();
===========================================
代碼裡面有一些客戶的信息,不能全部給你哈

❷ 用java實現sftp的客戶端,channel.connect()的時候,拋出異常,收到信息過長,然後就沒連上。怎麼回事

首先,不太明確你要問什麼?
J2EE是java企業級應用,它裡面關於安全方面的東西很多!
許可權管理?信息安全?授權服務?訪問控制?數據機密性?
要是你想全部都了解!
在這里提問是不行的!太龐雜了!
如果 你要問的是 java ftp傳輸過程中的一些安全注意事項!
這里建議 你使用 apache的開源項目。他們把基於java的ftp操作都封裝好了!
安全相關都有保證。
我下面可以給你復制一段 ftp下載遠程終端的java代碼!你可以參考一下!

需要下載 org.apache.commons.net包
可以到 網站下載!
/**
* Description: 從FTP伺服器下載文件
* @param ip FTP伺服器的ip地址
* @param port FTP伺服器埠,默認為:21
* @param username FTP登錄賬號
* @param password FTP登錄密碼
* @param remotePath FTP伺服器上的相對路徑
* @param fileName 要下載的文件名
* @param localPath 下載後保存到本地的路徑
* @return
*/
public static boolean downFile(String ip, int port,String username, String password, String remotePath,String fileName,String localPath,String localfile) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ip, port);
//處理中文轉碼操作
ftp.setControlEncoding("GBK");

FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");

ftp.login(username, password);//登錄

reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}

ftp.changeWorkingDirectory(remotePath);//轉移到FTP伺服器目錄
FTPFile[] fs = ftp.listFiles();
for(int i = 0; i < fs.length; i++){
FTPFile ff = fs[i];
if(ff.getName().equals(fileName)){
String localfilename = localfile;//按規則設置文件名這里你要下載文件,可以自己定義下載之後的文件名
File localFile = new File(localPath+File.separator+localfilename);

OutputStream is = new FileOutputStream(localFile);
//此處retrieveFile的第一個參數由GBK轉為ISO-8859-1編碼。否則下載後的文件內容為空。
ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), is);

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

❸ 我用C#寫了一個ftp的上傳下載程序是bs架構的請問在web程序使用ftp傳輸文件有什麼好處

WEB空間是用來放網頁的,可以讓別人瀏覽到,就像虛擬空間一樣,一般伺服器需要加裝IIS或APACHE,
而FTP空間則是用來存放文件專門供下載的,也就是說,FTP空間只能上傳和下載,而不能通過IE訪問。這種伺服器不涉及到網站,一般只裝SERVE-U就可以了。

採用的傳輸協議不一樣,一個是HTTP,一個是FTP。

WEB上傳與FTP上傳的區別
WEB上傳:即通過瀏覽器(IE)來上傳文件
FTP上傳:簡稱文件傳輸協議,通過FTP上傳
1,通過IE瀏覽器上傳文件,按照"操作向導"一步步操作完成,用戶無須培訓;
1,上傳之前,需要安裝專業上傳軟體,並對軟體加以學習,用戶需要學習上傳軟體;
2,通過分配用戶許可權發布課件,簡單,安全;
2,需要建立FTP伺服器及配置設置,專業性強;
3,支持斷點續傳,支持大文件上傳;
3,不支持斷點續傳,只能重新上傳,支持大文件上傳;
4,上傳課件屬性(格式,上傳時間,人員等)自動生成,方便快捷;
4,FTP上傳後,需要從後台手工輸入課件屬性,費時費力;
5,上傳後的課件,配有審核機制,保證課件質量;
5,FTP上傳後的課件,沒有審核機制;
6,審核後的課件,自動歸類,用戶通過校園網瀏覽;
6,FTP上傳的課件後需要手工進行歸類,比較煩麻;

❹ 讀取ftp文件最後一行以後報錯,無法訪問已釋放的對象。 對象名:System.Net.Sockets.NetworkStream

while ((strLine = reader.ReadLine()) != null) //這里報錯 讀取到最後一的時候
會這樣是因為當讀取流讀取到最後一行內容後就關閉了文件了
雖然在正常的讀取流中會在讀取完內容後返回null
但再ftp文件的讀取中,讀取完最後一行後再讀取就會拋出這個異常
其實用您代碼注釋的這句//string strfs = reader.ReadToEnd();來讀取就可以了
如果要分行處理直接用分行符分割一下就可以了

熱點內容
安卓手機的雲備份在哪裡能找到 發布:2025-01-17 00:14:12 瀏覽:471
詐騙的腳本 發布:2025-01-16 23:51:27 瀏覽:314
電腦配置有點低怎麼玩和平精英 發布:2025-01-16 23:46:14 瀏覽:818
ipfs分布式伺服器是什麼幣種 發布:2025-01-16 23:32:29 瀏覽:991
android動態icon 發布:2025-01-16 23:03:12 瀏覽:605
優酷電腦緩存在哪 發布:2025-01-16 22:58:29 瀏覽:298
進口途銳哪個配置好 發布:2025-01-16 22:35:24 瀏覽:962
骨幹路由器怎麼配置 發布:2025-01-16 22:24:39 瀏覽:244
途安2021款買哪個配置 發布:2025-01-16 22:21:01 瀏覽:329
圖片的壓縮原理 發布:2025-01-16 22:17:15 瀏覽:493