java 上传的图片大小为0_Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取...

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

7fad1fceb90906c619df823b06b5eae2.png

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

//将ftp模式修改为Passive模式

ftpClient.enterLocalPassiveMode();

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

1c5ee2c8e365483dc239778c483a25dc.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

private staticProperties getFtpConfig(){

Properties p=newProperties();

String path=Thread.currentThread().getContextClassLoader().getResource("ftpConfig.properties").getPath();try{

p.load(newFileInputStream(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();

}returnp;

}

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 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

468d18b23b7ab3e8648b15e1ec08983d.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 向FTP服务器上传文件

*@authorAdministrator

* 2019年12月25日 下午1:45:34

*@paramprojectName 项目名

*@paramimgName 文件名

*@paramimgStr 图片码

*@return成功返回true,否则返回false

*@throwsFileNotFoundException*/

public static String uploadFile(String projectName,String imgName,String imgStr) throwsFileNotFoundException {

String result= "";

FTPClient ftpClient= newFTPClient();

String dfFolder= new SimpleDateFormat("yyyyMMdd").format(new Date());//分日期存放:20191225//FTP服务器文件存放路径。

String basePathProject = basePath +"/"+projectName;try{intreply;//连接FTP服务器,用默认端口直接连接FTP服务器

ftpClient.connect(ftpServerIP);//登录

ftpClient.login(ftpUsername, ftpPassword);

reply=ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {

ftpClient.disconnect();

System.out.println("连接ftp失败!");returnresult;

}//将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) //图像数据为空

returnresult;

BASE64Decoder decoder= newBASE64Decoder();try{//Base64解码

byte[] b =decoder.decodeBuffer(imgStr);for(int i=0;i

b[i]+=256;

}

}// //设置上传文件的类型为二进制类型

ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);

InputStream is= null;

is= newByteArrayInputStream(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();returnresult;

}

}catch(IOException e) {

e.printStackTrace();

}finally{if(ftpClient.isConnected()) {try{

ftpClient.disconnect();

}catch(IOException ioe) {

}

}

}returnresult;

}

FTP上传方法

成功上传

8026a1074eab760846626a93e2c0f21c.png

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

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

tomcat7.0.63之前的版本

maxPostSize 设置为 0 或者负数

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

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

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

a7c9308248aa0ad47f91e91248e09382.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值