准备工作:需要使用coomos-net jar包。下载地址

一、 上传图片到FTP,文件大小为0的问题,解决:将ftp模式修改为Passive模式就可以了。

  1. //将ftp模式修改为Passive模式
  2. ftpClient.enterLocalPassiveMode();

二、配置文件的操作,具体介绍请看Java中Properties类的用法总结

1.使用.properties配置文件的形式定义相关常量。

2.在工具类中导入配置文件

  1. private static Properties getFtpConfig(){
  2. Properties p=new Properties();
  3. String path=Thread.currentThread().getContextClassLoader().getResource("ftpConfig.properties").getPath();
  4. try {
  5. p.load(new FileInputStream(path));
  6. // System.out.println(p.getProperty("ftpUsername"));
  7. // System.out.println(p.getProperty("ftpPassword"));
  8. // System.out.println(p.getProperty("ftpServerIP"));
  9. // System.out.println(p.getProperty("basePath"));
  10.  
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. return p;
  15. }

Properties

3.调用该方法,这样就取到了配置文件里对应的数据。

  1. private static String ftpUsername = getFtpConfig().getProperty("ftpUsername");
  2. private static String ftpPassword =getFtpConfig().getProperty("ftpPassword");
  3. private static String ftpServerIP=getFtpConfig().getProperty("ftpServerIP");
  4. private static String basePath = getFtpConfig().getProperty("basePath");// 文件路径

三、下面开始讲上传ftp具体的操作

1.将前台传回的base64编码,进行拆分。 解码之前得去掉"data:image/jpeg;base64,"。

  1. String ftpImgSrc="";
  2. if (!("".equals(base64ImgsString)) && base64ImgsString !=null) {
  3. SimpleDateFormat dateFormatImg = new SimpleDateFormat("yyyyMMddHHmmss");
  4. List<Object> imgBase64List = JSON.parseArray(base64ImgsString);
  5. for (Object object : imgBase64List) {
  6.   String[] imgBaseArray = object.toString().split(",");
  7.   String base64Head = imgBaseArray[0];
  8.   //图片后缀
  9.   String imgSuffix = base64Head.substring(base64Head.indexOf("/")+1, base64Head.indexOf(";"));
  10.   //去掉base64编码字符串的前缀
  11.   String imgStr=imgBaseArray[1];
  12.   //重命名图片文件,日期加工号
  13.   String newImgName = dateFormatImg.format(new Date()) +"_"+zjmWorkNumber+"."+imgSuffix;
  14.  //向FTP服务器上传文件 ,返回路径
  15.  ftpImgSrc = FtpUtil.uploadFile("CZBG",newImgName,imgStr);
  16. }
    }

2.上传文件方法,参数为项目名,图片名称,图片加密后的字符串。

我的文件路径是ftp:/ftpIP//picture/大项目名/子项目名/yyyyMMdd/yyyyMMddHHmmss_xxx.jpg

  1. /**
  2. * 向FTP服务器上传文件
  3. * @author Administrator
  4. * 2019年12月25日 下午1:45:34
  5. * @param projectName 项目名
  6. * @param imgName 文件名
  7. * @param imgStr 图片码
  8. * @return 成功返回true,否则返回false
  9. * @throws FileNotFoundException
  10. */
  11. public static String uploadFile(String projectName,String imgName,String imgStr) throws FileNotFoundException {
  12. String result = "";
  13. FTPClient ftpClient = new FTPClient();
  14. String dfFolder = new SimpleDateFormat("yyyyMMdd").format(new Date());//分日期存放:20191225
  15. //FTP服务器文件存放路径。
  16. String basePathProject = basePath +"/"+ projectName;
  17. try {
  18. int reply;
  19. // 连接FTP服务器,用默认端口直接连接FTP服务器
  20. ftpClient.connect(ftpServerIP);
  21. // 登录
  22. ftpClient.login(ftpUsername, ftpPassword);
  23. reply = ftpClient.getReplyCode();
  24. if (!FTPReply.isPositiveCompletion(reply)) {
  25. ftpClient.disconnect();
  26. System.out.println("连接ftp失败!");
  27. return result;
  28. }
  29. //将ftp模式修改为Passive模式
  30. ftpClient.enterLocalPassiveMode();
  31. //新建相关的项目文件
  32. ftpClient.makeDirectory(basePathProject);
  33. //切换到对应项目文件夹下
  34. ftpClient.changeWorkingDirectory(basePathProject);
  35. //创建当前日期文件夹
  36. ftpClient.makeDirectory(dfFolder);
  37. //切换到上传目录
  38. ftpClient.changeWorkingDirectory(dfFolder);
  39. String filePath ="ftp:/"+ftpServerIP+basePathProject+"/"+dfFolder+"/"+imgName;
  40. //上传图片
  41. if (imgStr == null) //图像数据为空
  42. return result;
  43. BASE64Decoder decoder = new BASE64Decoder();
  44. try{
  45. //Base64解码
  46. byte[] b = decoder.decodeBuffer(imgStr);
  47. for(int i=0;i<b.length;++i){
  48. if(b[i]<0){//调整异常数据
  49. b[i]+=256;
  50. }
  51. }
  52. // //设置上传文件的类型为二进制类型
  53. ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
  54. InputStream is = null;
  55. is = new ByteArrayInputStream(b);
  56. ftpClient.storeFile(new String(imgName.getBytes("utf-8"), "iso-8859-1"), is);
  57. is.close();
  58. //退出
  59. ftpClient.logout();
  60. result = filePath;//返回存的ftp路径
  61. }catch (Exception e){
  62. e.printStackTrace();
  63. return result;
  64. }
  65. } catch (IOException e) {
  66. e.printStackTrace();
  67. } finally {
  68. if (ftpClient.isConnected()) {
  69. try {
  70. ftpClient.disconnect();
  71. } catch (IOException ioe) {
  72. }
  73. }
  74. }
  75. return result;
  76. }

FTP上传方法

成功上传

 问题:表单提交时因为图片太大,Ajax发送请求,后台接收都为null。

解决:修改tomcat  maxPostSize="-1" 使post内容大小不限制

tomcat7.0.63之前的版本

maxPostSize 设置为 0 或者负数

Connector 节点中加入maxPostSize="0"  或者  maxPostSize="-1"

tomcat7.0.63之后的版本,需要设置为负数

Connector 节点中加入 maxPostSize="-1"

Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取的更多相关文章

  1. 【FTP】java FTPClient 文件上传内容为空,文件大小为0

    问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: ...

  2. linux下常用FTP命令 上传下载文件【转】

    1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...

  3. 上传文件到CDN,上传后文件错误。

    开始用xfp上传,发现文件错误.后来改用filezilla,上传后文件正确.害苦了我啊

  4. vsftpd上传文件大小为0(主动模式)

    最近在搞VSFTPD+Nginx结合,但是发现上传文件大小总是为0, 由于最开始在搞的时候不知道主动模式和被动模式到底是什么鬼东西,所以遇到问题根本找不到根的原因,遇到问题只是乱搜,好像是解决了问题, ...

  5. 利用Java API通过路径过滤上传多文件至HDFS

    在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...

  6. java调用svnkit工具类上传本地文件到svn服务器

    package org.jenkinsci.plugins.svn.upload.step; import java.io.*; import org.tmatesoft.svn.core.SVNCo ...

  7. Spring学习---Spring中利用组件实现从FTP服务器上传/下载文件

    FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti ...

  8. 使用批处理文件在FTP服务器 上传下载文件

    1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt   192.168.1.1 建立一个 ...

  9. Linux 终端访问 FTP 及 上传下载 文件

    今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上.google 一下. 方 ...

随机推荐

  1. 查询MySQL DB

    public DataTable ConnMySql(string strRegisterNo) { try { DataTable dt = new DataTable("table&qu ...

  2. Petya and Array CodeForces - 1042D

    很不错的一道题 给你一个长度为n的数组,问共有多少个区间满足区间之和小于给定的数t 这种题一般做法肯定是枚举,固定左端点枚举右端点,枚举的过程需要优化,否则就是n方 这道题我先求一个前缀和,然后逆着枚 ...

  3. 程序里面带有浮点数,默认会自动转换为double类型存储

    带有浮点数,默认会转换为double类型存储. #include "common.h" #include <stdio.h> #include <stdlib.h ...

  4. linux100讲——03 什么是linux

    1.linux 有两种含义: 一种是linus 编写的开源操作系统的内核 另一种是广义的操作系统 2.linux的第一印象 服务端操作系统和客户端操作系统要做的事情不一样 命令行操作方式与图形界面的差 ...

  5. web服务器、Web中间件和Web容器的区别

    web服务器>web中间件>web容器 Tomcat(servlet容器)  是  Tomcat中间件  也是  Tomcat服务器 看了谢公子的csdn文章,让我彻底分清了这三者的区别. ...

  6. Eclipse中配置Tomcat容器

    Tomcat 安装与配置 Tomcat是Apache 软件基金会(Apache Software Foundation)核心项目之一,支持最新的Servlet 和JSP 规范.因为Tomcat 技术先 ...

  7. PHP生成登录图片验证码

    很久之前写的 感觉登录还挺常用 记录一下. public function makeLoginCodeAction() //生成登录页的验证码 { Header("Content-type: ...

  8. Linux系统编程、网络编程-文件I/O

    第一章:文件io 1. 文件io讲些什么 文件io这一章讲的是,如何调用Linux OS所提供的相关的OS API,实现文件的读写. 1.1 如何理解“文件IO”这个词 IO就是input outpu ...

  9. RN开发-Navigator

    1.在入口组件render方法中返回<Navigator>            let defaultName = 'Welcome';            let defaultCo ...

  10. 录入规则文件名到CSV文件

    import os import sys import csv # 导出到csv文件 def export_to_csv(datas): with open('export.csv', 'w', ne ...