JAVAファイルアップロードFTPリモートサーバー
2538 ワード
方法1:文字列ファイルストリームがローカルファイルを生成しない
FTPClient.enterLocalPassiveMode();この方法は、データ接続のたびにftpクライアントがftp serverにデータを転送するためのポートを開設するように伝えることを意味します.なぜそうするのかというと、ftp serverは異なるポートを開くたびにデータを転送する可能性がありますが、linuxではセキュリティ制限のため、一部のポートが開いていないため、ブロックが発生する可能性があります.Q:FTPClientでftp.storeFile(file Name,inputFile)に実行する.反応しなくなった
A: ftpclient.enterLocalPassiveMode();
ftp.storeFile(fileName, inputFile);問題解決
なぜなら、FTPプロトコルにはPORT方式とPASV方式の2つの働き方があり、中国語ではアクティブ式と受動式を意味する.PORT(アクティブ)方式の接続プロセスは、クライアントがサーバのFTPポート(デフォルトは21)に接続要求を送信し、サーバが接続を受け入れ、コマンドリンクを確立することである.データを転送する必要がある場合、クライアントはコマンドリンク上でPORTコマンドでサーバーに「XXXXポートを開いたので、接続してください」と伝えます.そこで、サーバーは20ポートからクライアントのXXXXポートに接続要求を送信し、データリンクを確立してデータを転送する.PASV(パッシブ)方式の接続プロセスは、クライアントがサーバのFTPポート(デフォルトは21)に接続要求を送信し、サーバが接続を受け入れ、コマンドリンクを確立することである.データを転送する必要がある場合、サーバはコマンドリンク上でPASVコマンドでクライアントに「XXXXポートを開いたので、接続してください」と伝えます.そこでクライアントはサーバのXXXXポートに接続要求を送信し、データリンクを確立してデータを転送する.方法2:ローカルファイルをリモートサーバにアップロードする
FTPClient ftpClient = new FTPClient();
try {
InputStream is = null;
// 1.
is = new ByteArrayInputStream(fileContent.getBytes()); //
// 2.
ftpClient.connect(server);
// 3. ftp
ftpClient.login(userName, userPassword);
// 4.
ftpClient.changeWorkingDirectory(remotePath); //
// 5.
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //
ftpClient.enterLocalPassiveMode();
ftpClient.storeFile(new String(fileName.getBytes("utf-8"),"iso-8859-1"), is);
is.close();
} catch (Exception e) {
result = false;
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (Exception e) {
result = false;
}
}
}
FTPClient.enterLocalPassiveMode();この方法は、データ接続のたびにftpクライアントがftp serverにデータを転送するためのポートを開設するように伝えることを意味します.なぜそうするのかというと、ftp serverは異なるポートを開くたびにデータを転送する可能性がありますが、linuxではセキュリティ制限のため、一部のポートが開いていないため、ブロックが発生する可能性があります.Q:FTPClientでftp.storeFile(file Name,inputFile)に実行する.反応しなくなった
A: ftpclient.enterLocalPassiveMode();
ftp.storeFile(fileName, inputFile);問題解決
なぜなら、FTPプロトコルにはPORT方式とPASV方式の2つの働き方があり、中国語ではアクティブ式と受動式を意味する.PORT(アクティブ)方式の接続プロセスは、クライアントがサーバのFTPポート(デフォルトは21)に接続要求を送信し、サーバが接続を受け入れ、コマンドリンクを確立することである.データを転送する必要がある場合、クライアントはコマンドリンク上でPORTコマンドでサーバーに「XXXXポートを開いたので、接続してください」と伝えます.そこで、サーバーは20ポートからクライアントのXXXXポートに接続要求を送信し、データリンクを確立してデータを転送する.PASV(パッシブ)方式の接続プロセスは、クライアントがサーバのFTPポート(デフォルトは21)に接続要求を送信し、サーバが接続を受け入れ、コマンドリンクを確立することである.データを転送する必要がある場合、サーバはコマンドリンク上でPASVコマンドでクライアントに「XXXXポートを開いたので、接続してください」と伝えます.そこでクライアントはサーバのXXXXポートに接続要求を送信し、データリンクを確立してデータを転送する.方法2:ローカルファイルをリモートサーバにアップロードする
public void uploadFile(String remotePath, String localPath, String fileNames)
throws Exception {
if (connectServer()) {
logger.info(" [" + localPath + "]SFTP [" + remotePath + "]");
OutputStream outstream = null;
InputStream instream = null;
try {
instream = new FileInputStream(new File(localPath + fileNames));
outstream = this.channel.put(remotePath + fileNames);
byte[] b = new byte[1024];
int n;
while ((n = instream.read(b)) != -1) {
outstream.write(b, 0, n);
}
outstream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeServer();
}
logger.info(" [" + localPath + "]SFTP [" + remotePath + "]");
} else {
throw new Exception("SFTP ");
}
}