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

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

原文地址:https://www.cnblogs.com/sweetC/p/12163361.html

时间: 2024-10-27 19:14:51

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

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

问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: [参考:http://blog.csdn.net/tengdazhang770960436/article/details/43274001] 如果你在本地的 Java 项目里面去用 FtpClient 上传文件,然后虽然文件上传上去了,但是文件里面没有内容,那么这说明你的机器防火墙设置有问题如下图

FTPClient上传文件大小为0问题

FTP支持两种模式,一种方式叫做Standard主动方式,缺省时默认的方式,一种是 Passive 被动方式.? 下面介绍一个这两种方式的工作原理: 主动模式:第一步FTP客户端首先随机选择一个大于1024的端口p1,并通过此端口发送请求连接到FTP服务器的21号端口建立TCP连接,在FTP中这个连接叫做控制连接,连接成功建立后,FTP客户端会发送port命令,紧接着FTP客户端会监视自己的p1+1端口,FTP服务器接收到port命令会从自己的20号端口向FTP客户端的p1+1端口发起请求建立T

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

在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 1.文件模式 在某个单一操作中处理一系列文件是很常见的.例如一个日志处理的MapReduce作业可能要分析一个月的日志量.如果一个文件一个文件或者一个目录一个目录的声明那就太麻烦了,我们可以使用通配符(wild card)来匹配多个文件(这个操作也叫做globbing). Hadoop提供了两种方法

Spring中利用组件实现从FTP服务器上传/下载文件

FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.ne

winform通过FTP协议上传下载文件

上传文件:窗体代码 一次上传多个文件(grdAffixFilesList中需要上传的) private Boolean UploadFile() { string filename; int upCount=0; for (int i = 0; i < this.grdAffixFilesList.Rows.Count; i++) { filename = this.grdAffixFilesList.Rows[i].Cells["FILEPATH"].Text.ToString

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

1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt   192.168.1.1 建立一个批处理文件:命名为 test.bat(名称可以随便,为了方便操作,直接命名为1.bat)  然后将上面的内容拷贝进去 ftpconfig.txt的文件内容是: testuser test get test.exe    C:\ftptest\testdownload.exe bye 解释: 前两条命

Java通过FTP服务器上传下载文件的解决方案

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到F

linux FTP批量上传下载文件

一.登录ftp 输入 ftp 192.168.1.111 输入用户名:ftpuser 输入密码:aaa123 二.转到目标目录 输入:cd   test   ----test为文件夹 三.批量上传 输入 prom 此命令是打开批量上传或下载的开关,不然不能进行批量操作 输入下载命令:mput  * 四.批量下载 输入 prom 此命令是打开批量上传或下载的开关,不然不能进行批量操作 输入下载命令:mget *

Java中实现FTP上传下载文件的功能,完整代码

一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法.下载文件的通用方法以及删除文件.在ftp服务器上穿件文件夹.检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码: package ftpDemo;         import java.io.DataOutputStream;         import java.io.InputStream;         import java.io.Out