FTP経由で大量の画像をサーバーにアップロードするgrailsアプリがあります。そのために、commons-net を使用しています。奇妙なことに、ファイルごとに新しい接続を作成すると正常に動作しますが、一度接続してからファイルの送信を開始すると、ファイルが破損してしまいます! 以下は私のコードです。これは機能しますが、ファイルごとに新しい接続を作成したくありません。
filesList.each{ f->
String ftpUser = ConfigurationHolder.config.ftp.user
String ftpPassword = ConfigurationHolder.config.ftp.password
String ftpHost = ConfigurationHolder.config.ftp.host
log.debug "ftp> ${ftpUser}@${ftpHost}"
JakartaFtpWrapper ftp = new JakartaFtpWrapper();
ftp.connectAndLogin(ftpHost, ftpUser, ftpPassword)
ftp.setDataTimeout(1000*60*60*5)
log.debug "Welcome message[${ftp.getReplyString()}]"
log.debug "Current Directory[${ftp.printWorkingDirectory()}]";
log.debug "remote dir[${remoteDir}]"
ftp.makeDirectory(remoteDir)
ftp.cwd(remoteDir)
log.debug "uploading file path[${f}]..."
ftp.binary()
ftp.enterLocalPassiveMode()
def input = new FileInputStream(f.getAbsolutePath());
OutputStream output = ftp.storeFileStream(f.getName())
Util.copyStream(input, output);
output.flush()
input.close();
output.close();
ftp.logout();
ftp.disconnect();
}
それぞれから接続を削除すると、画像が破損しました! 私はここで何か間違っていますか?
編集**:これは機能しません:
String ftpUser = ConfigurationHolder.config.malibu.ftp.user
String ftpPassword = ConfigurationHolder.config.malibu.ftp.password
String ftpHost = ConfigurationHolder.config.malibu.ftp.host
log.debug "ftp> ${ftpUser}@${ftpHost}"
JakartaFtpWrapper ftp = new JakartaFtpWrapper();
ftp.connectAndLogin(ftpHost, ftpUser, ftpPassword)
ftp.setDataTimeout(1000*60*60*5)
log.debug "Welcome message[${ftp.getReplyString()}]"
log.debug "Current Directory[${ftp.printWorkingDirectory()}]";
log.debug "remote dir[${remoteDir}]"
ftp.makeDirectory(remoteDir)
ftp.cwd(remoteDir)
filesList.each{ f->
log.debug "uploading file path[${f}]..."
ftp.binary()
ftp.enterLocalPassiveMode()
def input = new FileInputStream(f.getAbsolutePath());
OutputStream output = ftp.storeFileStream(f.getName())
Util.copyStream(input, output);
output.flush()
input.close();
output.close();
}
ftp.logout();
ftp.disconnect();
編集:
JakartaFtpWrapper のリンク: http://www.nsftools.com/tips/JakartaFtpWrapper.java
編集2:
私はすでに ftp.binary() を内側、ループ、または外側に追加しようとしました。どちらも機能しません。
1 つの興味深い考えは、常に最後の写真が ftp サーバーで正しく取得されているということです。最初の写真は最後の写真よりも破損しているようです!