- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 Apache Commons Net 将 mp3 上传到我的 FTP 服务器的 Java 应用程序。
但是,如果是新文件,则会抛出MalformedServerReplyException
。如果是现有文件,它将完美上传并覆盖。
异常已经在行抛出:
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
但是,我检查了 Wireshark 并且命令 TYPE I
正常。
有人可以帮我解决这个问题吗?
public static void transferFile(File file, boolean OverwriteAllowed) {
FtpLogin();
try {
System.out.println('\n');
System.out.println("DEBUG: "+ file.toString());
boolean isNewFile = false;
String filePath = getFtpPathToMusic() + file.getName();
ftpClient.sendNoOp();
showServerReply();
if (ftpClient.listFiles(filePath).length > 0) {
System.out.println("File exists, and overwrite allowed is: " + OverwriteAllowed);
} else {
isNewFile = true;
// System.out.println("File does not exist yet on server");
}
if (OverwriteAllowed || isNewFile) {
ftpClient.setStrictReplyParsing(false);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
showServerReply();
InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = ftpClient.storeFileStream(filePath);
byte[] bytesIn = new byte[4096];
int read;
long remaining = file.length();
long transferred = 0;
System.out.println("Transfering data...");
while ((read = inputStream.read(bytesIn)) != -1) {
outputStream.write(bytesIn, 0, read);
remaining -= read;
transferred += read;
System.out.print('\r');
System.out.print("Remaining: " + remaining/1024 + "kb | Transferred: " + transferred/1024 + "kb");
}
System.out.println();
inputStream.close();
outputStream.close();
boolean completed = ftpClient.completePendingCommand();
if (completed) {
showServerReply();
System.out.println("File " + filePath + " uploaded succesfully");
}
} else {
System.out.println("File is skipped");
}
} catch (IOException e) {
e.printStackTrace();
showServerReply();
}
}
预期:上传成功
实际:MalformedServerReplyException
org.apache.commons.net.MalformedServerReplyException: Truncated server reply:
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:332)
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:300)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:523)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:648)
at org.apache.commons.net.ftp.FTP.type(FTP.java:1119)
at org.apache.commons.net.ftp.FTPClient.setFileType(FTPClient.java:1559)
at FtpSupport.FtpTransfer.transferFile(FtpTransfer.java:116)
at Home.ConverterGuiHome$convertMp3FilesExecute.actionPerformed(ConverterGuiHome.java:144)
应要求 - 完整的 (FTP) 日志记录:
Getting files from: /ideaProjects/GsmMp3Manager/src/main/Mp3Files/export
Creating mp3 object from file: 377 test.mp3
220 DiskStation FTP server ready.
SERVER: 220 DiskStation FTP server ready.
NOOP
200 NOOP command successful.
SERVER: 200 NOOP command successful.
USER *******
331 Password required for Barbet.
PASS *******
230 User Barbet logged in.
SERVER: 230 User Barbet logged in.
LOGGED IN SERVER
File listing in directory :
SYST
215 UNIX Type: L8
PASV
227 Entering Passive Mode (77,164,214,202,216,242)
LIST
150 Opening BINARY mode data connection for 'file list'.
226 Transfer complete.
[home] 4096 2018-12-12 00:00:00
[Spotlight] 4096 2018-11-17 00:00:00
[music] 4096 2018-11-22 00:00:00
[Mission Possible] 4096 2013-11-13 00:00:00
DEBUG:377 test.mp3
DEBUG: src/main/Mp3Files/export/377 test.mp3
NOOP
200 NOOP command successful.
SERVER: 200 NOOP command successful.
PASV
227 Entering Passive Mode (77,164,214,202,216,241)
LIST /Spotlight/muziek/377 test.mp3
150 Opening BINARY mode data connection for 'file list'.
550 /Spotlight/muziek/377 test.mp3: No such file or directory.
TYPE I
org.apache.commons.net.MalformedServerReplyException: Truncated server reply:
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:332)
(... see stack trace)
Close ftp session
QUIT
200 Type set to I.
SERVER: 200 Type set to I.
最佳答案
必须通过完整的 Wireshark 转储来确认,但我相信日志文件表明 550
对 LIST
命令的响应后跟两个换行符。 Apache FTPClient
将第二个“行”视为对以下 TYPE I
命令的(无效)响应。所以它看起来像是一个服务器端错误。
您是否尝试过使用其他方法来检查文件是否存在?
请参阅我对 Checking file existence on FTP server 的回答
(正如答案所说,使用 listFiles
检查文件是否存在实际上违反了 FTP 协议(protocol))。
关于java - FTP 列表命令抛出 MalformedServerReplyException : Truncated server reply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54044947/
我有一个使用 Apache Commons Net 将 mp3 上传到我的 FTP 服务器的 Java 应用程序。 但是,如果是新文件,则会抛出MalformedServerReplyExceptio
我设置了 SFTP 连接。我使用了 WinCSP 和 Filezilla,测试服务器工作正常。 Java 代码来自 apache commons-net 2.0,它给了我意外的错误 代码 privat
我每天尝试通过 FTP 将文件传输到我们的服务器时遇到问题。 这是服务器的响应... org.apache.commons.net.MalformedServerReplyException:无法解析
我正在使用 Java Apache Commons Net 库从 FTP 服务器下载文件。作为起点,我试图重新使用 https://www.codejava.net/java-se/networkin
我是一名优秀的程序员,十分优秀!