springmvc+mybatis+html 下将查询数据以excell形式上传到ftp(下)

上节讲到的是从数据库中查询相应的结果以excell形式写到ftp服务器上,今天又试了试从ftp上将excell 文件下载到本地目录,一开始的时候遇到了中文乱码问题,文件名中含有中文下载下来文件名为乱码,以下贴出核心代码

  1 package com.ninefbank.smallpay.admin.util;
  2
  3 import java.io.BufferedOutputStream;
  4 import java.io.File;
  5 import java.io.FileInputStream;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.io.OutputStream;
  9
 10 import org.apache.commons.lang3.StringUtils;
 11 import org.apache.commons.net.ftp.FTPClient;
 12 import org.apache.commons.net.ftp.FTPClientConfig;
 13 import org.apache.commons.net.ftp.FTPFile;
 14 import org.apache.commons.net.ftp.FTPReply;
 15 import org.slf4j.Logger;
 16 import org.slf4j.LoggerFactory;
 17
 18 import com.jcraft.jsch.Channel;
 19 import com.jcraft.jsch.ChannelSftp;
 20 import com.jcraft.jsch.JSch;
 21 import com.jcraft.jsch.Session;
 22 import com.ninefbank.smallpay.admin.common.Ftp;
 23 import com.ninefbank.smallpay.common.util.DateUtil;
 24 import com.ninefbank.smallpay.common.vo.FtpRequest;
 25
 26 public class FtpUtils {
 27     private static Logger logger = LoggerFactory.getLogger(FtpUtils.class);
 28     private static FTPClient ftp;
 29     private static String LOCAL_CHARSET = "GBK";
 30
 31
 32     /* 获取ftp连接
 33      * @param f
 34      * @return
 35      * @throws Exception
 36      */
 37     public static boolean connectFtp(Ftp f) throws Exception{
 38         ftp=new FTPClient();
 39         boolean flag=false;
 40         int reply;
 41         if (f.getPort()==null) {
 42             ftp.connect(f.getIpAddr(),21);
 43         }else{
 44             ftp.connect(f.getIpAddr(),f.getPort());
 45         }
 46         ftp.login(f.getUserName(), f.getPwd());
 47         ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
 48         reply = ftp.getReplyCode();
 49         if (!FTPReply.isPositiveCompletion(reply)) {
 50               ftp.disconnect();
 51               return flag;
 52         }
 53         ftp.changeWorkingDirectory(f.getPath());
 54         flag = true;
 55         return flag;
 56     }
 57      /* 下载链接配置
 58       * @param f
 59       * @param localBaseDir 本地目录
 60       * @param remoteBaseDir 远程目录
 61       * @throws Exception
 62       */
 63      public static void startDown(Ftp f,String localBaseDir,String remoteBaseDir ,FtpRequest reqs) throws Exception{
 64          if (FtpUtils.connectFtp(f)) {
 65
 66              try {
 67                  String ip = reqs.getIp();
 68                  int port = Integer.parseInt(reqs.getPort());
 69                  String userName = reqs.getUserName();
 70                  String userPwd = reqs.getPwd();
 71                  String path = reqs.getDownloadPath();
 72                  String fileName = reqs.getFileName();
 73                  String localPath = reqs.getLocalPath();
 74                  FTPFile[] files = null;
 75                  FTPClient ftpClient = new FTPClient();
 76                  ftpClient.connect(ip, port);
 77                  // 登录
 78                  ftpClient.login(userName, userPwd);
 79                  // 设置传输协议
 80                  ftpClient.setRemoteVerificationEnabled(false);
 81                  ftpClient.enterLocalPassiveMode();
 82                  ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
 83                  ftpClient.setListHiddenFiles(true);
 84 //                 ftpClient.configure(new FTPClientConfig(FTPClientConfig.SYST_UNIX));
 85                  if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
 86                          "OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
 87                          LOCAL_CHARSET = "UTF-8";
 88                          }
 89                  ftpClient.setControlEncoding(LOCAL_CHARSET);
 90                  boolean changedir = ftpClient.changeWorkingDirectory(remoteBaseDir);
 91                  if (changedir) {
 92
 93
 94 //                     ftp.setControlEncoding("GBK");
 95
 96                      files = ftpClient.listFiles();
 97                      for (int i = 0; i < files.length; i++) {
 98                          try{
 99                              if(fileName.equals(files[i].getName())){
100                                  downloadFile(ftpClient,files[i], localBaseDir, remoteBaseDir);
101                              }
102
103                          }catch(Exception e){
104                              logger.error("异常信息:"+e);
105                              logger.error("<"+files[i].getName()+">下载失败");
106                          }
107                      }
108                  }
109              } catch (Exception e) {
110                  logger.error("异常信息:"+e);
111                  logger.error("下载过程中出现异常");
112              }
113          }else{
114              logger.error("链接失败!");
115          }
116
117      }
118
119
120      /**
121       *
122       * 下载FTP文件
123       * 当你需要下载FTP文件的时候,调用此方法
124       * 根据<b>获取的文件名,本地地址,远程地址</b>进行下载
125       *
126       * @param ftpFile
127       * @param relativeLocalPath
128       * @param relativeRemotePath
129       */
130      private  static void downloadFile(FTPClient ftpClient,FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) {
131          if (ftpFile.isFile()) {
132              if (ftpFile.getName().indexOf("?") == -1) {
133                  OutputStream outputStream = null;
134                  try {
135                       String f= new String(ftpFile.getName().getBytes("GBK"), "iso-8859-1");
136                      File locaFile= new File(relativeLocalPath+ ftpFile.getName());
137                      //判断文件是否存在,存在则返回
138                      if(locaFile.exists()){
139                          return;
140                      }else{
141                          outputStream = new FileOutputStream(relativeLocalPath+ ftpFile.getName());
142                          ftpClient.retrieveFile(new String(ftpFile.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
143                          outputStream.flush();
144                          outputStream.close();
145                      }
146                  } catch (Exception e) {
147                      logger.error("异常信息:"+e);
148                  } finally {
149                      try {
150                          if (outputStream != null){
151                              outputStream.close();
152                          }
153                      } catch (IOException e) {
154                         logger.error("输出文件流异常");
155                      }
156                  }
157              }
158          }
159      }
160
161 }

调用处:

FtpUtils.uploadFTP(req);
Ftp f=new Ftp();
f.setIpAddr(DataBaseConst.FTP_FEE_IP);
f.setUserName(DataBaseConst.FTP_FEE_USERNAME);
f.setPwd(DataBaseConst.FTP_FEE_PASSWORD);

String ftpPath = DataBaseConst.FTP_FEE_PATH + newFilePath + currDate8 + "/";

FtpRequest req = new FtpRequest();
req.setIp(DataBaseConst.FTP_FEE_IP);
req.setPort(DataBaseConst.FTP_FEE_PORT);
req.setUserName(DataBaseConst.FTP_FEE_USERNAME);
req.setPwd(DataBaseConst.FTP_FEE_PASSWORD);
req.setDownloadPath(DataBaseConst.FTP_FEE_PATH + newFilePath);
req.setFileName(branchFileName);
req.setLocalPath(localPath);

FtpUtils.startDown(f, "e:/", ftpPath,req);

代码我也没怎么优化,我贴这也是为了提醒自己下载的时候乱码怎么解决

时间: 2024-10-20 09:29:48

springmvc+mybatis+html 下将查询数据以excell形式上传到ftp(下)的相关文章

Linux下定时任务实现mysql自动备份并上传远程ftp

Linux下定时任务实现mysql自动备份并上传远程ftp 1.创建保存备份文件的目录:/home/mysql_datacd /homemkdir mysql_data2.创建备份脚本文件:/home/mysql_data/mysql_databak.shcd /homecd  mysql_datatouch mysql_databak.shvim  mysql_databak.sh #!/bin/sh DUMP=/usr/bin/mysqldump#mysqldump备份文件执行路径 OUT_

PHP中导出Excel,将数据以Excel形式导出

现在,很多地方都需要导出数据,这里说一种简单的方法将数据以Excel的形式导出,方法如下: 1 <?php 2 date_default_timezone_set('PRC');//设置时区 3 4 /*设置head头信息*/ 5 Header("Content-Type:application/vnd.ms-excel;charset=UTF-8"); 6 Header("Accept-Ranges:bytes"); 7 Header("Conte

将数据以json字符串格式传到前台请求页面

1.前台ajax方法(这个是在FlowDocAction的add.jsp页面) //序列号 var preFileNo = factoryCode+deptCode+"-"+modelSeriesCode+"-"+workProcessCode; var yz=$.ajax({ type:'get', url:'FlowDocVersion!getSort.shtml?preFileNo='+preFileNo, cache:false, dataType:'jso

SpringMVC【参数绑定、数据回显、文件上传】

前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定... 默认支持的参数类型 从上面的用法我们可以发现,我们可以使用request对象.Model对象等等,其实是不是可以随便把参数写上去都行???其实并不是的... Controller方法默认支持的参数类型有4个,这4个足以支撑我们的日常开发了 HttpServletRequest HttpServl

SpringMVC常用配置(二),最简洁的配置实现文件上传

Spring.SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章: 1.Spring基础配置 2.Spring常用配置 3.Spring常用配置(二) 4.SpringMVC基础配置(通过注解配置,非xml配置) 5.SpringMVC常用配置 OK ,那么这里我想说另外一个话题,那就是文件上传,我之前在做Android开发的时候,文件上传我们一般会有两种策略,一种是通过IO流上传,还有一种是通过表单上传,其实这两种在客户端实现起来都是很简单的,在服

ASP.NET MVC 使用jquery.form.js 异步上传 在IE下返回值被变为下载的解决办法

错误记录: <script type="text/javascript"> $(function () { $(document).off("ajaxSend"); //异步上传 $("#Submit").click(function () { if ($("#selectFileButton").val() == "") { return false; } $("#fileForm&

SpringMVC简单入门 源码jar包下载和文件上传

1.Spring MVC简介 该项目的源码下载,springMVC和spring的jar包,请到 manyjar.com 下载. 下载方式1:点击下载 下载方式2:百度搜索manyjar(manyjar官网), 搜索springMVCUnit进行下载 Spring MVC基于java实现WEB MVC设计模式的的请求驱动类型的轻量级Web框架,将web层进行职责解耦,简化web开发. SpringMVC框架通过实现Model-View-Controller模式来将数据.业务与展现进行分离. Sp

linux下的ssh工具之,本地上传到linux服务器and Linux服务器文件另存为本地。非sftp工具。

首先,当你只有一个ssh工具可以连接linux,但你有想把文件在 linux 和windows(本地)直接的切换.其实可以的: 本文参考 1.将本地的文件,放到ssh远程的linux服务器上: 首先要安装工具包:   yum -y install lrzsz ok   操作方式是,在当前目录下 执行: rz    就会出现一个windows的弹框,选择你要上传到linux服务器上的文件点击确认就可以. 常用参数 -b 以二进制方式,默认为文本方式.(Binary (tell it like it

angular下H5上传图片(可多张上传)

最近做的项目中用到了angular下上传图片功能,在做的过程中遇到了许多问题,最终都得以解决 angular上传时和普通上传时过程差不多,只不过是要不一些东西转化为angular的东西. 1.ng-file-select,指令angular是没此功能的,其实也是转化成了change事件,不多说,直接上代码 angular.module('myApp').directive('ngFileSelect', [ '$parse', '$timeout', function($parse, $time