springboot以FTP方式上传文件到远程服务器

一、html代码  

 <div class="layui-form-item">
            <label class="layui-form-label">上传附件:</label>
            <div class="layui-input-block doc-litpic">
              <button type="button" name="avatar" class="layui-btn layui-btn-sm" data-url="/admin/archives/upload.html" id="larry-litpic"><i class="layui-icon"></i>本地上传</button>
              <a id="upload-filename-display" style="color: blue" href=""></a>
              <div class="larryms-img-view">
              </div>
            </div>
          </div>

二、js代码

 upload.render({
      accept: 'file',
      elem: '#larry-litpic',
      url: interface_cms_article_upload,
      field: 'fileNames',
      done : function (res, index, upload) {
        if(res.code != 200){
          layer.open({
            icon : 2,
            skin : "layui-layer-molv",
            content : res.msg
          });
        }else{
          layer.open({
            icon : 1,
            skin : "layui-layer-molv",
            content : res.msg
          });
          $('#upload-filename-display').text(res.filename);
          $("input[name='fileId']").val(res.filename);
        }
      },
      error : function (res) {
      }
    });

三、后台controller:

@RequestMapping(value = "/upload")
  @ApiOperation(value = "本地文件上传",notes ="本地文件上传" )
  public Map uploadfunction(HttpServletRequest request, HttpServletResponse response){
    //创建文件对象并获取请求中的文件对象
    MultipartFile file = null;
    Map resultData = new HashMap();
    try{
      MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
      file = mRequest.getFile("fileNames");
      //判断上传非空
      if(null == file) {
        resultData.put("code",0);
        resultData.put("msg","上传文件失败");
        resultData.put("filename",file.getOriginalFilename());
        return resultData;
      }
      //上传需要导入数据的文件
      //用来检测程序运行时间
      long startTime=System.currentTimeMillis();
      System.out.println("上传的文件名为:"+file.getOriginalFilename());
      String fileName = file.getOriginalFilename();
      InputStream inputStream = file.getInputStream();
      String hostName = uploadUtil.getHostname();
      String username = uploadUtil.getUsername();
      String password = uploadUtil.getPassword();
      String targetPath = uploadUtil.getTargetPath();
      String suffix = cmsArticleService.getSuffix(fileName);
      fileName = cmsArticleService.upload(hostName,username,password,targetPath,suffix,inputStream);
      //计算上传时间
      long endTime=System.currentTimeMillis();
      String uploadTime = String.valueOf(endTime-startTime);
      System.out.println("上传所用时间:"+uploadTime+"ms");
      resultData.put("code",200);
      resultData.put("msg","上传文件成功");
      resultData.put("filename",fileName);
      return resultData;
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return null;
  }

四、后台service上传至远程服务器

//FTP文件上传
  public static String upload(String hostname,String username,String password,
                String targetPath,String suffix,InputStream inputStream) throws SocketException, IOException {
    //实例化ftpClient
    FTPClient ftpClient = new FTPClient();
    //设置登陆超时时间,默认是20s
    ftpClient.setDataTimeout(12000);
    //1.连接服务器
    ftpClient.connect(hostname,21);
    //2.登录(指定用户名和密码)
    boolean b = ftpClient.login(username,password);
    if(!b) {
      System.out.println("登陸超時");
      if (ftpClient.isConnected()) {
        // 断开连接
        ftpClient.disconnect();
      }
    }
    // 设置字符编码
    ftpClient.setControlEncoding("UTF-8");
    //基本路径,一定存在
    String basePath="/";
    String[] pathArray = targetPath.split("/");
    for(String path:pathArray){
      basePath+=path+"/";
      //3.指定目录 返回布尔类型 true表示该目录存在
      boolean dirExsists = ftpClient.changeWorkingDirectory(basePath);
      //4.如果指定的目录不存在,则创建目录
      if(!dirExsists){
        //此方式,每次,只能创建一级目录
        boolean flag=ftpClient.makeDirectory(basePath);
        if (flag){
        System.out.println("创建成功!");
        }
      }
    }
    //重新指定上传文件的路径
    ftpClient.changeWorkingDirectory(targetPath);
    //5.设置上传文件的方式
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    //使用uuid,保存文件名唯一性
    String uuid= UUID.randomUUID().toString();
    /**
     * 6.执行上传
     * remote 上传服务后,文件的名称
     * local 文件输入流
     * 上传文件时,如果已经存在同名文件,会被覆盖
     */
    boolean uploadFlag = ftpClient.storeFile(uuid+suffix,inputStream);
    if(uploadFlag)
      System.out.println("上传成功!");
    return uuid+suffix;
  }

五、获取yml配置的工具类

@Data
@Component
public class UploadUtil {
  @Value("${upload.hostname}")
  private String hostname;
  @Value("${upload.username}")
  private String username;
  @Value("${upload.password}")
  private String password;
  @Value("${upload.targetPath}")
  private String targetPath;
}

总结

以上所述是小编给大家介绍的springboot以FTP方式上传文件到远程服务器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • spring boot上传文件出错问题如何解决

    这篇文章主要介绍了spring boot上传文件出错问题如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location

  • springboot上传文件过大的500异常解决

    修改appliaction.properties # 单个文件最大20m spring.servlet.multipart.max-file-size=20MB #一次请求最大100M spring.servlet.multipart.max-request-size=100MB 如果配置文件为appliaction.yml的这样配置文件: spring: servlet: multipart: maxFileSize: 20MB maxRequestSize: 100MB 500代码异常,在启

  • SpringBoot实现Excel文件批量上传导入数据库

    Spring boot + Spring data jpa + Thymeleaf 批量插入 + POI读取 + 文件上传 pom.xml: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <versi

  • SpringBoot上传文件到本服务器 目录与jar包同级问题

    前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了. 当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用SpringBoot的jar包发布项目的时候,你会发现,你不能像以前一样操作文件了.当你使用File file = new File()的时候根本不知道这个路径怎么办.而且总不能很小的项目也给它构建一个文件服务器吧.所以这次就来解决这样的问题. 不想知道细节的,可以直接跳转到最后封装的部分,里面

  • Spring Boot 文件上传与下载的示例代码

    文件的上传及下载功能是开发人员在日常应用及编程开发中经常会遇到的.正好最近开发需要用到此功能,虽然本人是 Android 开发人员,但还是业余客串了一下后台开发. 在本文中,您将学习如何使用 Spring Boot 实现 Web 服务中的文件上传和下载功能.首先会构建一个 REST APIs 实现上传及下载的功能,然后使用 Postman 工具来测试这些接口,最后创建一个 Web 界面使用 JavaScript 调用接口演示完整的功能.最终界面及功能如下: 项目环境 - Spring Boot

  • 详解SpringBoot下文件上传与下载的实现

    SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传与下载.前端上传采用百度webUploader插件.有关该插件的使用方法还在研究中,日后整理再记录.本文主要介绍SpringBoot后台对文件上传与下载的处理. 单文件上传 / 单文件上传 @RequestMapping(value = "/upload") @ResponseBody public String upload(@RequestParam("file") Multipart

  • springboot实现文件上传步骤解析

    这篇文章主要介绍了springboot实现文件上传步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一步编写上传的前段页面 <div> <button type="button" class="btn btn-primary" ng-click="openAddModal()" data-toggle="modal" data-target=&quo

  • SpringBoot+layui实现文件上传功能

    什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适). 页面代码(只需要引入基础layui的css与js) <fieldset c

  • springboot以FTP方式上传文件到远程服务器

    一.html代码   <div class="layui-form-item"> <label class="layui-form-label">上传附件:</label> <div class="layui-input-block doc-litpic"> <button type="button" name="avatar" class="

  • SpringBoot整合Minio实现上传文件的完整步骤记录

    目录 Minio 安装 Minio 使用docker安装 拉取镜像 启动 使用9000端口 登录控制台 创建存储桶 设置桶权限 创建 Java 客户端 依赖 配置文件 配置文件配置类 创建 minio 客户端 文件地址返回路径实体类 上传文件工具类 测试上传文件 Controller 测试上传 控制台也可以看到上传的视频 总结 Minio 上传文件如果不使用云服务的话,需要本地搭建,一般选择 FastDFS 但是 FastDFS 安装比较复杂,今天了解一款安装使用更简单的存储系统 MinIO M

  • 通过Ajax方式上传文件使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: Html代码  <form id= "uploadForm" action= "http://localhost:8080/cfJAX_RS/rest/file/upload" method= "post" enctype ="multipart/form-data"> <h1 >测试通过Rest接口上传文件 </h1> <p >指定文

  • PHP用FTP类上传文件视频等的简单实现方法

    文件1:ftp.php <?php /** * 仿写CodeIgniter的FTP类 * FTP基本操作: * 1) 登陆; connect * 2) 当前目录文件列表; filelist * 3) 目录改变; chgdir * 4) 重命名/移动; rename * 5) 创建文件夹; mkdir * 6) 删除; delete_dir/delete_file * 7) 上传; upload * 8) 下载 download * * @author quanshuidingdang */ cl

  • jQuery Ajax方式上传文件的方法

    jQuery Ajax方式上传文件用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 FormData 对象,还在用IE6 ? 只能仰天长叹.... 有了这两个对象,我们可以真正的实现Ajax方式上传文件. 示例代码: <!DOCTYPE html> <html> <head> <title>Html5 Ajax 上传

  • Ajax serialize() 表单进行序列化方式上传文件

    通过传统的 form 表单提交的方式上传文件 <form id="uploadForm" action="" method="post" enctype="multipart/form-data"> <p>上传文件:<input type ="file" name="file"/></p> <input type="subm

  • 解决Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"

    今天使用ajax上传文件时,出现了错误.数据传输的方式是通过定义formData完成的,提交的文件对象也设置为dom对象,但是还是不能发送请求.F12看到后台报了个错误:Uncaught TypeError: Illegal invocation,百度了一下,找到了解决方法. 解决方法:在ajax请求的参数中添加如下两个参数: $.ajax({ ..., processData: false, contentType: false, ... }); processData 类型:Boolean

  • python实现FTP循环上传文件

    本文实例为大家分享了python实现FTP循环上传文件的具体代码,供大家参考,具体内容如下 测试过程中,有时会用到FTP的数据流,或者需要使用FTP反复上传文件,所以写了一个FTP循环上传文件的python代码. 代码如下: #coding=utf-8 import sys import os from ftplib import FTP from time import sleep _XFER_FILE = 'FILE' _XFER_DIR = 'DIR' class Transmitter(

  • Java多线程实现FTP批量上传文件

    本文实例为大家分享了Java多线程实现FTP批量上传文件的具体代码,供大家参考,具体内容如下 1.构建FTP客户端 package cn.com.pingtech.common.ftp; import lombok.extern.slf4j.Slf4j; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.*; import java.net

随机推荐