Tim*_*tjn 6 java ftp apache-commons-net
由此下载的文件大小几乎相同,但某些行有所不同。每个答案都指向二进制文件类型。但这无济于事。有人知道这个问题(传输 PDF)吗?
FTPClient ftpClient = new FTPClient();
OutputStream outputStream = null;
boolean resultOk = true;
try {
ftpClient.connect(host, port);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(FTP.COMPRESSED_TRANSFER_MODE);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
if (showMessages) {
System.out.println(ftpClient.getReplyString());
}
resultOk &= ftpClient.login(usr, pwd);
if (showMessages) {
System.out.println(ftpClient.getReplyString());
}
outputStream = new FileOutputStream(localResultFile);
resultOk &= ftpClient.retrieveFile(remoteSourceFile, outputStream);
outputStream.flush();
outputStream.close();
if (showMessages) {
System.out.println(ftpClient.getReplyString());
}
if (resultOk == true) {
resultOk &= ftpClient.deleteFile(remoteSourceFile);
}
resultOk &= ftpClient.logout();
if (showMessages) {
System.out.println(ftpClient.getReplyString());
}
} finally {
ftpClient.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
从您共享的文件中可以清楚地看出,传输确实以文本/ascii 模式发生。
虽然 FTP 规范可能不要求,但对于某些 FTP 服务器(例如 FileZilla 服务器或 ProFTPD),您无法在登录之前更改传输类型。但 IIS、ProFTPD 或 vsftpd 等服务器则没有问题。另一方面,FileZilla 服务器默认为二进制模式(这又违反了规范),因此您可能正在使用另一种模式。
无论如何,请将.setFileType呼叫移至 后.login。并测试其返回值。
并删除.setFileTransferMode通话。它对大多数服务器没有任何损害,因为几乎没有服务器支持MODE C,因此无论如何调用都会被忽略。但是,如果您遇到这样做的服务器,它会中断传输,因为FTPClient实际上不支持它。
| 归档时间: |
|
| 查看次数: |
2045 次 |
| 最近记录: |