我正在尝试将大约6kb的文件上传到ssh服务器。我已尝试在终端上使用该命令,甚至测试了其他命令,它们也可以工作。甚至更奇怪的是,它会上传任何200KB或更大的内容。我无法弄清楚出了什么问题,但我怀疑它必须用我的while语句做一些事情来缓冲它。 (注意:我尝试了不同的buf尺寸。)任何帮助将不胜感激。 (注意:一切都设置正确所以不要求我的用户信息...我也在使用jsch我的库) 完成此操作后不会显示任何错误...文件根本不会显示在ssh服务器中。
public void testListener(FileUploadEvent event){
InputStream fis = null;
String lfile = event.getFile().getFileName();
if(lfile.lastIndexOf('\\') > 0){
lfile = lfile.substring(lfile.lastIndexOf('\\') + 1);
}
String rfile = "media/"+ lfile;
JSch jsch = new JSch();
Session session = jsch.getSession(user, remotehost);
session.setPassword(password);
session.connect();
boolean ptimestamp = false;
String command="scp "+ (ptimestamp ? " -p " : "")+ "-t " + rfile;
//String command = "cat > foo.txt";
System.out.println(command);
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();
channel.connect();
/*
if(ptimestamp){
command="T " +100 + " 0";
command += (" " + 1000 + " 0\n");
out.write(command.getBytes());
out.flush();
}
*/
long filesize = event.getFile().getSize();
command = "C0644 " + filesize + " " + lfile + "\n";
out.write(command.getBytes());
System.out.write(command.getBytes());
out.flush();
fis = event.getFile().getInputstream();
byte[] buf = new byte[1024];
int len=0;
while((len=fis.read(buf, 0, buf.length)) !=-1){
//Change this remove break
out.write(buf, 0, len);
}
fis.close();
fis=null;
buf[0]=0;
out.write(buf, 0, 1);
out.flush();
out.close();
channel.disconnect();
session.disconnect();
}
答案 0 :(得分:0)
我找到了解决方案,但这只是一个解决方法......
String command="cat >" + rfile +"; chmod 777 " + rfile +"; scp -t " + rfile;
我改变了命令来创建文件并解决了所有问题。我也删除了自用cat创建文件以来。但现在没有问题,感谢每个人(没有人)帮助过。
command = "C0644 " + filesize + " " + lfile + "\n";
out.write(command.getBytes());
System.out.write(command.getBytes());
out.flush();