ftp上传文件,linux

  String pathname = "upload";

  String fileName ="";

  String xuh = request.getParameter("xuh");

  String lcm = request.getParameter("lcm");

 

  Map<String,String> map=new HashMap<String,String>();

 

  try {

         // inputStream = request.getInputStream();

       // 创建工厂

       DiskFileItemFactory factory = new DiskFileItemFactory();

       ServletFileUpload upload = new ServletFileUpload(factory);

       // 得到所有的文件

       List<FileItem> items = upload.parseRequest(request);

       Iterator<FileItem> i = items.iterator();

       while (i.hasNext()) {

           FileItem fi = i.next();

           // false表示文件 否则字段

           if (!fi.isFormField()) {

               fileName = fi.getName();

               if (fileName != null) {

                       inputStream = fi.getInputStream();

                  }else{

                      map.put("flag","失败");

                  }

           }

       }

           

      ftpClient = new FTPClient();

      ftpClient.setControlEncoding("utf-8");

      try {

          ftpClient.connect(hostname, port); //连接ftp服务器

          ftpClient.login(username, password); //登录ftp服务器,这里很慢需要优化

          int replyCode = ftpClient.getReplyCode(); //是否成功登录服务器

          if (!FTPReply.isPositiveCompletion(replyCode)) {

                 ftpClient.disconnect();

                 map.put("flag","失败");

          }

          ftpClient.enterLocalPassiveMode();//被动模式,内网时使用,由服务器端开发端口给客户端机型数据传输

      } catch (MalformedURLException e) {

          e.printStackTrace();

          map.put("flag","失败"+e);

      } catch (IOException e) {

          e.printStackTrace();

          map.put("flag","失败"+e);

      }

       String rqml=CreateMakeDirectory();//返回一个日期目录

       String ftpDirectory=pathname+"/"+lcm+rqml;

       

      //切换到指定目录,切换不到则该目录不存在,创建一个然后切换,有则直接切换

         String tempPath="";

         if (!ftpClient.changeWorkingDirectory(ftpDirectory)) {

            String[] dirs = ftpDirectory.split("/");

               for (String dir : dirs) {

                     tempPath += "/" + dir;

                     if (!ftpClient.changeWorkingDirectory(tempPath)) {

                           ftpClient.makeDirectory(tempPath);

                           ftpClient.changeWorkingDirectory(tempPath);

                           }

                       }

               }else{

                   ftpClient.changeWorkingDirectory(tempPath);

                }

      //改变文件名称

      String newfileName=createFileNmae(fileName);

     

      ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);

     //设置上传缓存区

      ftpClient.setBufferSize(1024*1024);

      //关于读取的流,建立带缓冲的数据流

      BufferedInputStream Binput = new BufferedInputStream(inputStream);

      //写入文件

      ftpClient.storeFile(newfileName, Binput);

      inputStream.close(); //关闭流

      ftpClient.logout(); //推出登录

     map.put("flag","成功");

     map.put("fileName",newfileName);

     map.put("filePath","ftp://"+hostname+"/"+ftpDirectory+"/"+newfileName);

     map.put("xuh",xuh);

     map.put("ftpDirectory",ftpDirectory);

        

  } catch (Exception e) {

      System.out.println("shibai");

      e.printStackTrace();

      map.put("flag","失败"+e);

  } finally {

      if (ftpClient.isConnected()) {

          try {

              ftpClient.disconnect();//断开连接

          } catch (IOException e) {

              e.printStackTrace();

              map.put("flag","失败"+e);

          }

      }

      if (null != inputStream) {

          try {

              inputStream.close();

          } catch (IOException e) {

              e.printStackTrace();

              map.put("flag","失败"+e);

          }

      }

  }

    String  param= JSON.toJSONString(map);

    response.setCharacterEncoding("UTF-8");   

    response.setContentType("application/json;charset=UTF8");

    PrintWriter writer = response.getWriter();

    writer.write(JSON.toJSONString(map));

    writer.close();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值