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

摘要:
下载地址1.将图像上传到FTP。文件大小为0。解决方案:将FTP模式更改为被动模式//将FTP模式改为被动模式ftpClient enterLocalPassiveMode();2、 有关配置文件的操作,请参阅Java中Properties类的用法摘要。1.使用。属性配置文件以定义相关常数。privatestaticStringftpUsername=getFtpConfig()。getProperty;privatestaticStringftpPassword=getFtpConfig()。getProperty;privatestaticStringftpServerIP=getFtpConfig()。getProperty;privatestaticStringbasePath=getFtpConfig()。getProperty;//文件路径3.现在我们开始讨论上传ftp的具体操作。1.拆分从前台返回的base64代码。StringbasePathProject=basePath+“/”+项目名称;尝试{interply;//连接到FTP服务器并使用默认端口直接连接到FTP server ftpClient.Connect;//登录到ftpClient.login;reply=ftpClient.getReplyCode();if(!

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

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

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

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

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

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

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

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

Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取第3张Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取第4张
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

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

Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取第3张Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取第4张
/**
     *  向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上传方法

成功上传

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

 问题:表单提交时因为图片太大,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配置文件的读取第9张

免责声明:文章转载自《Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇win8 Pro 64位在 UEFI模式下Ghost系统 备份 恢复Rust 中项目构建管理工具 Cargo简单介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用java防止非法请求

1.过滤器 public class ImgFilter implementsFilter { @Override public void init(FilterConfig filterConfig) throwsServletException { System.out.println("过滤器开始!!!");...

HTML5中实现文件上传下载的三种解决方案(推荐)

前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. Http协议原理简介      HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于19...

http协议的POST传数据

PostRequest使用StreamWriter对象写入请求流,不需要使用HttpUtility.UrlEncode显示转码,而下面的需要显示转码,还需要将参数转为字节码 蛋疼…………。 public static string PostRequest(string url, string postData) { HttpWebRequest httpW...

3.开始使用Spring Cloud实战微服务

                 开始使用Spring Cloud实战微服务 3.1. Spring Cloud实战前提               3.1.1. 需要的技术储备                   语言方面:可以使用Java、scala、Groovy...等等,推荐使用Java                   构建工具方面:Java...

Httpclient-(get、post(application/json)、post(application/form-data)、download、upload)

pom文件引入包:      <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dep...

Redis 存储图片 [base64/url/path]vs[object]

一、base64图片编解码 基本流程:从网络获取下载一张图片。然后base64编码,再base64解码,存到本地E盘根文件夹下。 import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.F...