我上传了一个文件到服务器,但文件为空。(大小为零字节)
int reply;
ftp.connect(server,215);
ftp.login(username, Password);
System.out.println("Connected to " + server + ".");
System.out.print(ftp.getReplyString());
reply = ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP server refused connection.");
}
System.out.println("FTP server connected.");
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
InputStream input= new FileInputStream(source_file_path);
ftp.storeFile(dest_dir, input);
System.out.println(ftp.storeFile(dest_dir, input));
System.out.println( ftp.getReplyString() );
input.close();
ftp.logout();
答案 0 :(得分:1)
查看您的代码我认为您正在使用Jakarta commons net。 如果是真的,试试这个:
ftp.connect(address, port);
boolean ft = ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
if(!ft)
throw new Exception("Error");
ftp.enterLocalPassiveMode(); or ftp.enterLocalActiveMode();
boolean log = ftp.login(user, password);
//if log == true, then u are logged in
ftp.storeFile(remote, local);
另外,如果你想使用进度条来获得传输进度你可以试试这个方法而不是ftp.storeFile
InputStream stO = new BufferedInputStream(new FileInputStream(file), ftp.getBufferSize());
OutputStream stD = ftp.storeFileStream(file.getName());
org.apache.commons.net.io.Util.copyStream(
stO,
stD,
ftp.getBufferSize(),
file.length(),
new org.apache.commons.net.io.CopyStreamAdapter()
{
@Override
public void bytesTransferred(long totalBytesTransferred, int bytesTransferred,
long streamSize)
{
try
{
pb.setMaximum((int)streamSize);
pb.setValue((int)totalBytesTransferred);
}
catch(Exception ex)
{
pb.setMaximum(-1);
}
}
});
stO.close();
stD.close();
boolean ok = ftp.completePendingCommand();
if(!ok)
throw new Exception("ERROR while sending the file");
PS:pb是JProgressBar
答案 1 :(得分:1)
您正在存储文件两次。
ftp.storeFile(dest_dir, input);
System.out.println(ftp.storeFile(dest_dir, input));
由于您没有重新打开输入流,第二次调用storeFile
方法时,输入流处于EOF,因此您第二次上传的文件将没有内容,因此覆盖第一个文件。
要打印storeFile
的结果,您应该:
Object result = ftp.storeFile(dest_dir, input);
System.out.println(result);