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

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

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

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

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

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

private static Properties getFtpConfig(){
Properties p=new Properties();
String path=Thread.currentThread().getContextClassLoader().getResource("ftpConfig.properties").getPath();
try {
p.load(new FileInputStream(path));
// System.out.println(p.getProperty("ftpUsername"));
// System.out.println(p.getProperty("ftpPassword"));
// System.out.println(p.getProperty("ftpServerIP"));
// System.out.println(p.getProperty("basePath")); } catch (Exception e) {
e.printStackTrace();
}
return p;
}

Properties

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

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

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

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

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

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

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

/**
* 向FTP服务器上传文件
* @author Administrator
* 2019年12月25日 下午1:45:34
* @param projectName 项目名
* @param imgName 文件名
* @param imgStr 图片码
* @return 成功返回true,否则返回false
* @throws FileNotFoundException
*/
public static String uploadFile(String projectName,String imgName,String imgStr) throws FileNotFoundException {
String result = "";
FTPClient ftpClient = new FTPClient();
String dfFolder = new SimpleDateFormat("yyyyMMdd").format(new Date());//分日期存放:20191225
//FTP服务器文件存放路径。
String basePathProject = basePath +"/"+ projectName;
try {
int reply;
// 连接FTP服务器,用默认端口直接连接FTP服务器
ftpClient.connect(ftpServerIP);
// 登录
ftpClient.login(ftpUsername, ftpPassword);
reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
System.out.println("连接ftp失败!");
return result;
}
//将ftp模式修改为Passive模式
ftpClient.enterLocalPassiveMode();
//新建相关的项目文件
ftpClient.makeDirectory(basePathProject);
//切换到对应项目文件夹下
ftpClient.changeWorkingDirectory(basePathProject);
//创建当前日期文件夹
ftpClient.makeDirectory(dfFolder);
//切换到上传目录
ftpClient.changeWorkingDirectory(dfFolder);
String filePath ="ftp:/"+ftpServerIP+basePathProject+"/"+dfFolder+"/"+imgName;
//上传图片
if (imgStr == null) //图像数据为空
return result;
BASE64Decoder decoder = new BASE64Decoder();
try{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;++i){
if(b[i]<0){//调整异常数据
b[i]+=256;
}
}
// //设置上传文件的类型为二进制类型
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
InputStream is = null;
is = new ByteArrayInputStream(b);
ftpClient.storeFile(new String(imgName.getBytes("utf-8"), "iso-8859-1"), is);
is.close();
//退出
ftpClient.logout();
result = filePath;//返回存的ftp路径
}catch (Exception e){
e.printStackTrace();
return result;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
}
}
}
return result;
}

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. H5_0024:对于事先无法确定css大小的情况,可以通过JS动态修改

            $(function(){             function Heights(){                 var WinH = $(window).height(); ...

  2. object解构赋值

    let options = { title: 'menu', width: 100, height: 200 } //如果简写,变量名必须和属性名一致 let {title,width,height} ...

  3. 轻量级RPC设计与实现第四版

    在本版本中引入了SPI机制,关于Java的SPI机制与Dubbo的SPI机制在以前的文章中介绍过. 传送门:Dubbo的SPI机制与JDK机制的不同及原理分析 因为设计的RPC框架是基于Spring的 ...

  4. C++->10.3.6.设有两个按升序排列的二进制文件a和b,将他们合并成一个新的升序二进制数据文件file。

    #include<iostream.h> #include<stdlib.h> #include<string.h> #include<fstream.h&g ...

  5. 网络共享服务(三)之SAMBA

    前面说到了FTP和NFS,由于FTP是客户端和服务器基于ftp应用协议进行交换数据的,它不支持挂载共享目录的方式,而NFS又不支持跨平台,所以就催生了第三种网络共享服务:samba Samba是在Li ...

  6. mac自带功能超详细介绍

    mac自带的超实用的功能分享给大家,包含自带的Spotlight(聚焦) 计算器功能,预览的 PDF 压缩功能,切换同一应用的不同窗口等,让您的工作更加轻松. 1.Spotlight(聚焦) 计算器功 ...

  7. Java开学测试-学生成绩管理系统

    题目: 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishiscore,networkscore ...

  8. [ERR] Node goodsleep.vip:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

    解决方案 以前的cluster节点信息 保留 要删除 dump.rdb node.conf集群启动时自动生成文件

  9. 从零开始学 Java - 搭建 Spring MVC 记录云创的日子 第一章

    2017年11月29日 来到新项目,需要用到Spring MVC ,那么我就开始记录我这次的学习. Spring MVC 框架是围绕一个 DispatcherServlet 来设计的,这个 Servl ...

  10. Netty中CompositeByteBuf的理解以及读写操作

    转载请注明出处 https://www.cnblogs.com/majianming/articles/the_composite_byte_buf_read_and_wite_operation_o ...