准备工作:需要使用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. Python_3

    """ Function_1: 寻找水仙花数. 水仙花数也被称为超完全数字不变数.自恋数.自幂数.阿姆斯特朗数, 它是一个3位数,该数字每个位上数字的立方之和正好等于它本 ...

  2. C++->10.3.5.从键盘上输入职工的编号,从职工信息文件中查找该职工资料,查找成功时显示职工姓名、电话号码,邮政编码和地址。

    p=getchar(); }  printf("\n"); rewind(in);         //文件流指针移到文件开始位置 p=fgetc(in); while(!feof ...

  3. P2048 [NOI2010]超级钢琴 [堆+st表]

    考虑只能取长度为 [L,R] 的,然后不难想到用堆搞. 搞个前缀和的st表,里面维护的是一个 最大值的位置 struct rmq { int mx[N][20] ; void qwq(int n) { ...

  4. gulp常用插件之yargs使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 yargs这是一款通过解析参数并生成优雅的用户界面来帮助您构建交互式命令行工具.处理命令行参数的通用解决方案,只要一句代码 var args = ...

  5. 两个html页面之间传值

    参考网址:https://blog.csdn.net/csdn_ds/article/details/78393564?locationNum=8&fps=1

  6. SYZOJP186 你猜猜是不是DP 二分+hash解法

    SYZOJP186 你猜猜是不是DP题解 题目传送门 现在给两个仅包含小写字母的字符串a,b ,求a 与b的最长公共连续子串的长度. 对于20%的数据,a,b长度 ∈ [1, 200] 对于50%的数 ...

  7. 爬取豆瓣音乐TOP250的数据

    参考网址:https://music.douban.com/top250 因为详细页的信息更丰富,本次爬虫在详细页中进行,因此先爬取进入详细页的网址链接,进而爬取数据. 需要爬取的信息有:歌曲名.表演 ...

  8. Luogu4316 | 绿豆蛙的归宿 (期望DP)

    题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都 ...

  9. C++-POJ3735-Training little cats[矩阵乘法][快速幂]

    矩阵快速幂,主要是考构造.另外,swap总是写龊? 为什么?干脆放弃了.唉,我太难了. 思路:操作e和s都很好想,主要是g操作 我们可以额外空出一位,记为1,每次要加1,就对这个额外的1进行计算即可 ...

  10. 前后端分离开发,跨域时jsessionid每次请求都变化的问题解决方法

    本解决方法的使用前提是,前端开发使用的是vue,后端使用java(SpringMVC) 在前后端分离开发过程中,可能会出现因跨域而导致每次请求的jsessionid不一致的情况 解决方法: 前端:要在 ...