使用commons-net 的 ftp上传一个100K的文件要20几秒,
使用FTP工具,两秒就搞定了,速度怎么这么慢?

解决方案 »

  1.   

    public boolean uploadFile(InputStream iStream, String newName)   throws IOException {   
            boolean flag = false;   
            try {   
                // can execute [OutputStream storeFileStream(String remote)]   
                // Above method return's value is the local file stream.   
             ftpClient.setDataTimeout(TIMEOUT);
             ftpClient.setSoTimeout(TIMEOUT);
             ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            
                flag = ftpClient.storeFile(newName, iStream);   
            } catch (Exception e) {   
                flag = false;   
                return flag;   
            } finally {   
                if (iStream != null) {   
                    iStream.close();   
                }   
            }   
            return flag;   
        }   
      

  2.   

    你的InputStream iStream是从哪里来的,request里面直接获取的吗?单步到这几行代码,找出哪一行代码是性能瓶颈
      

  3.   

    最好加上BuffferedInputStream,而且也的确需要看你的InputStream是怎么来的。如果是FileInputStream应该比较快,如果不是则可能瓶颈在InputStream上
      

  4.   

    性能瓶颈就是uploadFile这个函数
    需要20几秒
      

  5.   

    inputstream是文件上传,用commons.io获取的 item.getInputStream()
      

  6.   

    文件上传可能慢,因为这个是网络流。加上BufferedInputStream可能会好一点。你可以使用FileInputStream测试性能。
      

  7.   

    BufferedInputStream 和 FileInputSteam 都用了,没多大差别,是不是用java socket传输是特别慢的,因为java ftp底层就是socket传的
      

  8.   

    我上传20M也就3秒而已,应该是你网络问题之类。你就先写一个简单的类开始,直接从FileInputStream开始上传
    FTPClient client = new FTPClient();
    client.connect("。。");
    client.login("。。");
    long t1 = System.currentTimeMillis();
    client.storeFile("A.exe", new BufferedInputStream(new FileInputStream("a.exe")));
    long t2 = System.currentTimeMillis();
    System.out.println("Time:" + (t2 - t1));
    client.quit();
    都是打印3000左右,20M的文件
      

  9.   

    代码也跟踪了,还是在ftpClient.storeFile(newName, iStream);   
    这个方法花费最多时间。天啊!!,谁来救救我啊
      

  10.   

    是不是这样的,通过别的机器上传的时候需要先经过http上传到服务器,然后再通过ftp上传至指定的服务器,所以最好做个客户端来直接实现上传
      

  11.   

    第一可能网络原因,第二可能是FTP服务限制了上传速度
      

  12.   

    这个问题我今天也遇到了,跟踪了代码发现是因为buffer默认设置为1024,那必然很慢了,只要将FTPClient的缓冲大小变大即可,代码入下:
      

  13.   

    手点快了,代码如下:
    FTPClient client = new FTPClient();
    client.conect(ip, port);
    client.login(username, password);
    //主要是这句代码进行设置缓冲大小,这样的话就比原来快很多了
    client.setBufferSize(100000);