Apache commons-net FTP ライブラリを使用して大きなファイル (>100Mb) をセキュア FTP サーバー IIS にアップロードしようとしています。
これが私のコードです:
try{
ftpClient = new FTPSClient("TLS", false);
this.ftpClient.setDataTimeout(6000000);
this.ftpClient.setConnectTimeout(6000000);
ftpClient.connect(host, port);
ftpClient.login(userName, password);
ftpClient.enterLocalPassiveMode();
if (ftpClient.getReplyCode() == 230){
ftpClient.sendCommand("OPTS UTF8 ON");
ftpClient.execPBSZ(0);
ftpClient.execPROT("P");
else{
throw new Exception("connection failed.....");}
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
InputStream is= new FileInputStream("C:\\movie.avi");
ftpClient.setUseEPSVwithIPv4(true);
ftpClient.storeFile(remotePath, is);
is.close();
}
catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
19Mb を超えるファイルのアップロードに失敗します。storeFile メソッドはIOException
、空の StackTrace でスローします。以下のIOException
変数を確認できます。
e CopyStreamException (id=39)
cause CopyStreamException (id=39)
detailMessage "IOException caught while copying." (id=45)
ioException SocketException (id=46)
cause SocketException (id=46)
detailMessage "Connection reset by peer: socket write error" (id=50)
stackTrace null
stackTrace null
totalBytesTransferred 19084288
実際には、次のように動作します。
1)アップロードを開始すると、サイズがゼロのファイルが作成されますが、アップロード中にファイルのサイズはまだゼロであり、例外が発生すると、この空のファイルは FTP によって削除されます。
2) 面白いことに、FileZila もこれらのファイルのアップロードに失敗しますが、その制限サイズは 70Mb です。
何か不足していますか?