FTP上传以及浏览器直接下载,完整代码

工具类:

package com.xxx.xxx.excel.ftp;

import com.xxx.utils.date.DateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.*;
import java.net.SocketException;
import java.net.URLEncoder;
import java.util.Date;


/**
 * FTP公共服务工具
 * @author: big bug bean
 */
public class FtpUtil {
    private final static Log logger = LogFactory.getLog(FtpUtil.class);

    /**
     * 获取FTPClient对象
     * @param ftpHost       FTP主机服务器
     * @param ftpPassword   FTP 登录密码
     * @param ftpUserName   FTP登录用户名
     * @param ftpPort       FTP端口 默认为21
     * @return
     */
    public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,String path,String name,FileInputStream local) {
        FTPClient ftpClient = null;
        try {
            ftpClient = new FTPClient();
            ftpClient.connect(ftpHost, ftpPort);              // 连接FTP服务器
            ftpClient.login(ftpUserName, ftpPassword);        // 登陆FTP服务器
            ftpClient.setControlEncoding("GBK");             // 中文支持
            // 指定上传文件的类型 二进制文件
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.enterLocalPassiveMode();
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                logger.info("未连接到FTP,用户名或密码错误。");
                ftpClient.disconnect();
            } else {
                logger.info("FTP连接成功。");
            }
        } catch (SocketException e) {
            e.printStackTrace();
            logger.info("FTP的IP地址可能错误,请正确配置。");
        } catch (IOException e) {
            e.printStackTrace();
            logger.info("FTP的端口错误,请正确配置。");
        }
        return ftpClient;
    }

 /**
     * 通过浏览器的方式从ftp下载文件
     * 用户名xx
     * 密码:xxxxx
     * url:ftp://uftp:Ftp.1024@10.xx.xx.xx/xxx/2019-10-31/xxx.xls
     * @param ftpHost             FTP IP地址
     * @param ftpUserName         FTP 用户名
     * @param ftpPassword         FTP用户名密码
     * @param ftpPort             FTP端口
     * @param ftpPath             FTP服务器中文件所在路径 格式: xxx/xxx
     * @param fileName            FTP服务器上要下载的文件名称
     */
    public static String downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath,String folderName, String fileName) {
        String url = null;
        try {
           // String f_ame = new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING); //编码文件格式,解决中文文件名
            String f_ame = URLEncoder.encode(fileName, "GBK");//编码文件名,支持中文文件名(本人菜,这段代码来之不易。。)
 
           url = "ftp://"+ftpUserName+":"+ftpPassword+"@"+ftpHost+ftpPath+"/"+folderName+"/"+f_ame+"";
            return url;
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("下载文件错误");
            e.printStackTrace();
        }
        return url;
    }

    /**
     *
     * @param ftpHost
     * @param ftpUserName
     * @param ftpPassword
     * @param ftpPort
     * @param ftpPath
     * @param fileName
     * @param local
     * @return
     */

public static boolean  uploadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String fileName, FileInputStream local) {
        boolean result = false;
        FTPClient ftpClient = null;
        try {
            int reply;
            ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort,ftpPath,fileName,local);
            ftpClient.changeWorkingDirectory(ftpPath);
            reply = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
                return result;
            }
            fileName = new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING);    //编码文件名,支持中文文件名
            //在指定的ftp文件夹目录创建新文件夹存放当天上传的文件

            String ymd = DateUtils.dateToStr(new Date(),"yyyy-MM-dd");
            ftpClient.makeDirectory(ymd);
            // 指定上传路径
            ftpClient.changeWorkingDirectory(ftpPath+"/"+ymd);
            if (!ftpClient.storeFile(fileName, local)) {
                return result;
            }
            local.close();
            ftpClient.logout();
            result = true;
        } catch (FileNotFoundException e) {
            logger.error("没有找到" + ftpPath + "文件");
            e.printStackTrace();
        } catch (SocketException e) {
            logger.error("连接FTP失败.");
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("文件读取错误。");
            e.printStackTrace();
        }
        return result;
    }

}

前端代码

doUpLoadFtpExcel: function () {
   var file = $("#fileftp").val();
   //没有选择文件清空
   if(!file){
    return;
   }
   var exec = (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : '';
   if (exec != "xls") {
    alert("文件格式错误!");
    return false;
   }
   document.domain = location.hostname;
   jQuery.ajaxFileUpload({
    url: httpurl+'user/importFtpExcel?token='+TokenUtils.getToken(),
    secureuri: false,
    fileElementId: "fileftp",
    dataType: 'json',
    type: "post",
    success: function(data) {
     debugger;
     if(data.code == 2){//上传文件名重复
      alert(data.msg);
      $("#coverUpLoadExcel").attr("style","display:block;");
      $("#stillUploadExcel").attr("style","display:block");
      $("#doUpLoadFtpExcel").attr("style","display:none;");
     }else{
      alert(data.msg);
      $("#ftpFileUpload").modal("hide");
     }
    },
    error: function(data,index) {
     debugger;
     LayerUtils.show(data.msg)
     $("#ftpFileUpload").modal("hide");
    }
   });
  },

<!-- 自定义弹框提示 本地Excel上传-->
          <div class="modal fade" id="fileUpload">
           <div class="modal-dialog">
            <div class="modal-content" style="color: #333;text-align: inherit; background: #fff;">
             <div class="modal-body">
              <input type="file" name="file" id="file111"   />
             </div>
             <div class="modal-footer" style="padding: 0;">
              <button type="button" class="btn btn-default" v-on:click="upLoadExcel()">上传</button>
              <button type="button" class="btn btn-default" id="window_alert_model_close"  data-dismiss="modal">关闭</button>
             </div>
            </div>
            <!-- /.modal-content -->
           </div>
           <!-- /.modal-dialog -->
          </div>

<div class="modal fade" id="ftpFileUpload">
           <div class="modal-dialog">
            <div class="modal-content" style="color: #333;text-align: inherit; background: #fff;">
             <div class="modal-body">
              <input type="file" name="fileftp" id="fileftp"   />
             </div>
             <div class="modal-footer" style="padding: 0;">
              <button type="button" class="btn btn-default" id="doUpLoadFtpExcel" v-on:click="doUpLoadFtpExcel">上传</button>
              <button type="button" class="btn btn-default" id="coverUpLoadExcel" v-on:click="coverUpLoadExcel">覆盖上传</button>
              <button type="button" class="btn btn-default" id="stillUploadExcel" v-on:click="stillUploadExcel">直接上传</button>
              <button type="button" class="btn btn-default" id="window_alert_model_close" data-dismiss="modal">关闭</button>
             </div>
            </div>
            <!-- /.modal-content -->
           </div>
           <!-- /.modal-dialog -->
          </div>

uploadFtpExcel: function () {
   $("#ftpFileUpload").modal("show");
   $("#coverUpLoadExcel").attr("style","display:none;");
   $("#stillUploadExcel").attr("style","display:none");
   $("#doUpLoadFtpExcel").attr("style","display:block;");
  },

 

控制层

/**
  * 从ftp导出文件
  */
 @ResponseBody
 @RequestMapping("/downLoadFromFtp")
 @RequiresPermissions("user:list")
 public Result downLoadFromFtp(HttpServletResponse res,String folderName,String name) throws IOException{
  Result result= new Result();
  try {
   //校验文件在表里是否存在记录
   List<SysFtp> listSysFtp = sysFtpService.findList(name,folderName);
   if(listSysFtp.size()>0){
    // ftp服务器下载
    String url = FtpUtil.downloadFtpFile(environment.getProperty("ftp.hostname"),
      environment.getProperty("ftp.username"),
      environment.getProperty("ftp.password"),
      Integer.valueOf(environment.getProperty("ftp.port")),
      environment.getProperty("ftp.path"),folderName,name);
    result.setData(url);
    result.setMsg("下载文件成功");
    return result;
   }else{
    result.setMsg("下载文件失败:文件不存在");
    return result;
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  result.setMsg("下载文件失败");
  return result;
 }

doUpLoadFtpExcel: function () {
   var file = $("#fileftp").val();
   //没有选择文件清空
   if(!file){
    return;
   }
   var exec = (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : '';
   if (exec != "xls") {
    alert("文件格式错误!");
    return false;
   }
   document.domain = location.hostname;
   jQuery.ajaxFileUpload({
    url: httpurl+'user/importFtpExcel?token='+TokenUtils.getToken(),
    secureuri: false,
    fileElementId: "fileftp",
    dataType: 'json',
    type: "post",
    success: function(data) {
     debugger;
     if(data.code == 2){//上传文件名重复
      alert(data.msg);
      $("#coverUpLoadExcel").attr("style","display:block;");
      $("#stillUploadExcel").attr("style","display:block");
      $("#doUpLoadFtpExcel").attr("style","display:none;");
     }else{
      alert(data.msg);
      $("#ftpFileUpload").modal("hide");
     }
    },
    error: function(data,index) {
     debugger;
     LayerUtils.show(data.msg)
     $("#ftpFileUpload").modal("hide");
    }
   });
  },

 

写在最后,本人只是为自己做记录,如有需要以及不解处请留言,我会及时回复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值