使用Apache FTPClient 连接远程服务器上传文件

HTML部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/jquery/jquery-1.12.4.min.js"></script>
</head>
<script type="text/javascript">
    $(function(){
        console.log(this);
    })
    function upload(){
        var file = $("#file")[0].files[0];
        var form = new FormData();
        form.append("file", file);
        console.log(form);
        $.ajax({
            url:'upload',
            type:'POST',
            data:form,
            processData:false,//告诉jquery要传输data对象
            contentType:false,//告诉jquery不需要增加请求头对于contentType的设置
            success:function(data){
                console.log(data);
            },
            error:function(e){
                console.log(e);
            }
        })
    }
</script>
<body>
<div>
    <label for="file">上传图像</label> </a>
    <input type="file" id="file" >
    <button id="btn" onclick="upload()">submit</button>
</div>
</body>
</html>

JAVA部分:

一、首先要配置FTP服务器连接

package com.syasuo.demo.upload;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author SYASUO
 * @date 2020/7/27 10:42
 * 上传至FTP服务器
 */
public class FTPConfig {

    private static Logger logger = LoggerFactory.getLogger(FTPConfig.class);
    
    //建立连接
    public static void connect(FTPClient ftpClient) throws Exception{
        ftpClient.connect("FTP服务器ip地址",端口号);
        int reply = ftpClient.getReplyCode();
        if(!FTPReply.isPositiveCompletion(reply)){
            logger.info("服务器拒接连接");
            return;
        }
        if(!ftpClient.login("服务器用户名","服务器密码")){
            logger.info("用户名或密码错误");
            return;
        }
    } 
    
    //设置传输格式
    public static void setProperty(FTPClient ftpClient) throws Exception{
        ftpClient.enterLocalPassiveMode();
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    }
    
    //建立文件夹
    public static void createDir(FTPClient ftpClient,String path){
        try {
            ftpClient.makeDirectory(path);
        } catch (Exception e) {
            logger.error("创建目录失败:{}",e);
        } 
    }

    public static void logut(FTPClient ftpClient) throws Exception{
        ftpClient.noop();
        ftpClient.logout();
    }
}

二、JAVA文件上传代码

package com.syasuo.demo.upload;

import org.apache.commons.net.ftp.FTPClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @author SYASUO
 * @date 2020/7/27 11:02
 */
@Service
public class Upload {
    
    Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 单文件上传
     * @param file 文件体
     * @return
     * @throws Exception 异常抛出
     */
    public String uploadFile(MultipartFile file) throws Exception{
        FTPClient ftpClient = null;
        String[] str = file.getOriginalFilename().split("\\.");
        String fileName = UUID.randomUUID().toString().replaceAll("-","")+"."+str[str.length - 1];
        String path = new SimpleDateFormat("yyyyMMdd").format(new Date());
        try {
            if(ftpClient == null){
                ftpClient = new FTPClient(); 
            }
            //开始FTP服务器连接
            FTPConfig.connect(ftpClient);
            FTPConfig.setProperty(ftpClient);
            FTPConfig.createDir(ftpClient,path);
            
            //文件上传 开始
            InputStream inputStream = file.getInputStream();
            ftpClient.changeWorkingDirectory(path);
            ftpClient.storeFile(fileName,inputStream);
            inputStream.close();
            //文件上传 结束
            
            //登出FTP
            FTPConfig.logut(ftpClient);
        } catch (Exception e) {
            logger.error("上传失败:{}",e);
        } finally {
            if(ftpClient.isConnected()){
                try {
                    //中断FTP连接
                    ftpClient.disconnect();
                } catch (IOException e) {
                    logger.error("关闭失败:{}",e);
                }
            }
        }
        //返回文件存储路径
        return path+"/"+fileName;
    }
}

*注意项:formData文件名一定要与Java控制层接受文件名一致

本文是form.append("file", file); Java控制层是file 文件名一致

效果图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值