如果大小小于200KB,则文件不通过ssh上传文件

时间:2014-06-05 20:43:11

标签: java file-upload ssh scp jsch

我正在尝试将大约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();
}

1 个答案:

答案 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();