热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

这篇文章主要介绍了springboot以FTP方式上传文件到远程服务器,需要的朋友可以参考下

一、html代码                  

 

二、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方式上传文件到远程服务器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


推荐阅读
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • SAP羞辱国产软件商:技术停在10年前
    SAP中国研究院总裁芮祥麟表示,国产软件厂商过于热衷概念炒作,技术水平停留在10年前的客户端架构水平。他认为,国内厂商推出基于SOA的产品或转型SAAS模式是不可能的,研发新架构需要时间。当前最热门的概念是云计算,芮祥麟呼吁国产厂商应该潜心研发底层架构。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文讲述了孙悟空写给白骨精的信件引发的思考和反省。孙悟空在信中对自己的行为进行了反思,认识到自己胡闹的行为并没有给他带来实际的收获。他也揭示了西天取经的真相,认为这是玉皇、菩萨设下的一场陷阱。他还提到了师傅的虚伪和对自己的实心话,以及自己作为师傅准备提拔的对象而被派下来锻炼的经历。他认为路上的九九八十一难也都是菩萨算计好的,唐僧并没有真正的危险。最后,他提到了观音菩萨在关键时刻的指导。这封信件引发了孙悟空对自己行为的思考和反省,对西天取经的目的和自己的角色有了更深入的认识。 ... [详细]
  • Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
    打开IIS,建一个网站,主机头用不带www的域名,随便指向一个目录。然后在这个网站上点右键,属性--主目录--重定向到URL如图ÿ ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
author-avatar
手机用户2502880237
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有