RobFtp上传注册部分

类别:Java 点击:0 评论:0 推荐:

u       上传注册部分:改为RobFtp上传程序。

 

1.原有的upload包中含有3个类,分别是knowledgeRegister,splitInfo,upload,。

  其中knowledgeRegister类是主程序,负责启动upload类,并且做一些初始化工作。

       splitInfo类是程序的核心,负责分片传输的功能。

       upload类进行FTP连接和登录,也完成上传分片后的重新组合功能。

 

程序流程为:

 

 

 

 

 

2.吸取原有程序的思想:

从aes.ini文件中读取zip文件名esName和文件路径esPath,

写入哈希表中:

HashMap map;

map.put(esName,esPath);

 

用户注册上传时从下拉列表jComboBox中读取esName变量,

esName=(String)jComboBox.getSelectedItem();

esPath=(String)map.get(esName);

 

3. 将原有程序全部重写后的upload包中含有3个类,分别是RobFtp,RobFrame,RobHelp。

 

1.RobFtp:程序入口类,进行容器的布局,并且引出主程序 new RobFrame()

 

类图描述为:

 

 

2.RobFrame:类图为:主程序,

Ø         Swing设计:菜单分为3部分:分别为“文件”,“风格”,“帮助”。

                面板布局分为3部分:FTP设置,选择欲注册知识库,进行上传。

 

Ø         上传部分:采用两种方式,用户选择其一。

直接传输方式:传输速度快,但是如果网络不稳定,或是发生其他意外情况,传输将被中断,必须从头开始再传输。

断点续传方式:如果网络中断,或是用户自己进行中断,点击“注册”按钮后可以从中断处继续,适合于网络不稳定的地区。传输速度较慢。

 

Ø         用户使用方法:

进行FTP设置:填写IP地址,端口,用户名,密码,如果没有用户名和密码,请选择匿名方式。然后点击“连接”按钮,连接至服务器。

选择欲注册知识库:在下拉列表中选择想要注册的知识库。

传输方式选择:用户可以根据情况任选一种方式:直接传输方式或断点续传方式。

类图描述为:

 

3.RobHelp:程序帮助文档,网页形式,目前框架已经搭好,主页面可以显示,但其中文字部分显示不出,不知为何?下面将要解决

 

类图描述为:

 

 

 

 

4. 程序主要实现:

这里只简要说明断点续传部分:

将upload定义为一个线程,这样可以使得多个用户同时向服务器发出请求,并行处理。

Thread thread=new Thread(){

       public void run(){

         upload();}

     };

        thread.start();

 

连接至服务器之后,登录,然后在服务器的虚拟目录上建立目录:一级目录为用户名,二级目录为欲注册知识库名。

try{

      String a=ftpClient.pwd();

      System.out.println(a);

      if(a.compareTo("/"+user+"/"+fileTitle)!=0&&a.compareTo("/"+user)!=0&&a.compareTo("//"+user+"/"+fileTitle)!=0)

      {

        try{ftpClient.chdir(user);}

 

        catch(Exception e){

                  try{

                  ftpClient.mkdir(user);

                 ftpClient.chdir(user);

 

                  }catch(Exception e1){

                  uploadLabel.setText("创建目录失败!");

                  JOptionPane.showMessageDialog(this,"无法创建目录,请稍后再注册。");

                 return;

                  }

              }

    try{

    ftpClient.chdir(fileTitle);

    }catch(Exception e){

    try{

    ftpClient.mkdir(fileTitle) ;

    ftpClient.chdir(fileTitle);

 

     ftpClient.setType(FTPTransferType.BINARY);

                  }catch(Exception e1){

                        uploadLabel.setText("创建目录失败!");

                        JOptionPane.showMessageDialog(this,"无法创建目录,请稍后再注册。");

                 return;

                  }

              }

            }}catch(Exception e1){

                        uploadLabel.setText("无法创建目录,出错!");}

 

进行断点续传:分片大小为static final int rob=512;用变量start记录断点位置信息,可以进行用户中断和网络异常中断。点击“注册”按钮后,程序会自动读取断点信息,从上传断点处恢复,继续上传过程。

    try{

      f1=new RandomAccessFile(esPathFile,"r");

     if(start==0)

      {f1.seek(start*rob);System.out.println(start+"开始点1");}

      else{f1.seek(start*rob);

      System.out.println(start+"开始点2");}

    byte[] buffer=new byte[rob];

    bUpload=true;

 

    int esPathFileSize=(int)esPathFile.length();

     jProgressBar.setMaximum(esPathFileSize);

     jProgressBar.setValue(0);

    while(true) {

      if(bUpload){

      int bytes=f1.read(buffer);

      if(bytes<0)

         break;

      ftpClient.put(buffer,remoteFile,true);//需要处理?等等

 

      start++;

      iStep+=bytes;

      jProgressBar.setValue(iStep);

    }else{

          uploadLabel.setText("注册已被你中断!");

           JOptionPane.showMessageDialog(this,"注册已被你中断,请继续完成注册!");

          break;

 

        }

          }

      f1.close();

 

 

  }

 

      catch(Exception el){

        el.printStackTrace();

        uploadLabel.setText("网络中断!");

         JOptionPane.showMessageDialog(this,"网络中断,请稍后继续完成注册!");

      try{

      // f=new RandomAccessFile(esPathInfoFile,"rw");

 

      // f.writeInt(start);

        System.out.println(start+"网络中断!");

      //  f.close();

        f1.close();

        jButton3.setEnabled(true);

        jButton4.setEnabled(false);

      }

      catch(Exception ew){ew.printStackTrace();}

      }

 

其中进度条jProgressBar可以显示上传进度,中断亦可。

 

4. 软件screenshot:

        

  

 

 

 

          

 

 

5. 小结:

上传注册部分已基本完成。现在对java也只是刚刚入门,初步感觉内容太多,难点也太多,遇到问题自己很难解决或者要花很长时间摸索,要编出像样的程序还是困难。下面的计划是修改监控部分monitor,这部分因为不仅牵扯到网络,而且有数据库接口部分,难度可能较大。

 

本文地址:http://com.8s8s.com/it/it15656.htm