FTP上传功能因不是平台自带功能,所以需要进行额外的java开发。当把jar包打包后,需要放入到O2目录:o2server\custom\jars。

重启服务器后生效!

一、自定义包DocumentManager.java

package com.z.custom;

import java.io.*;
import java.io.FileNotFoundException;
import java.util.Date;
import java.util.Objects;
import javax.servlet.http.HttpServletRequest;

import com.x.base.core.entity.StorageProtocol;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.tools.DefaultCharset;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.vfs2.*;
import org.apache.commons.vfs2.provider.ftp.FtpFileSystemConfigBuilder;
import org.apache.commons.vfs2.provider.ftp.FtpFileType;

public class DocumentManager {
    private static HttpServletRequest request;
    private static FileSystemManager fsManager = null;

    static {
        try {
            fsManager = VFS.getManager();
        } catch (FileSystemException e) {
            System.out.println(e.getMessage());
        }
    }


    public static byte[] readFileToByte(String filePath, String encoding) throws IOException {
        if (StringUtils.isEmpty(filePath)) {
            throw new IOException("File '" + filePath + "' is empty.");
        }
        FileObject fileObj = null;
        InputStream in = null;
        try {
            fileObj = fsManager.resolveFile(filePath);
            if (fileObj.exists()) {
                if (org.apache.commons.vfs2.FileType.FOLDER.equals(fileObj.getType())) {
                    throw new IOException("File '" + filePath + "' exists but is a directory");
                } else {
                    in = fileObj.getContent().getInputStream();
                    return IOUtils.toByteArray(in);
                }
            } else {
                throw new FileNotFoundException("File '" + filePath + "' does not exist");
            }
        } catch (FileSystemException e) {
            throw new IOException("File '" + filePath + "' resolveFile fail.");
        } finally {
            in.close();
            IOUtils.closeQuietly(in);
            if (fileObj != null) {
                fileObj.close();
            }
        }
    }


    public static void writeByteToFile(String filePath, byte[] fileByte, String encoding, boolean passive) throws Exception {
        if (StringUtils.isEmpty(filePath)) {
            throw new IOException("File '" + filePath + "' is empty.");
        }
        FileObject fileObj = null;
        OutputStream out = null;
        filePath = new String(filePath.getBytes("UTF-8"),"ISO-8859-1");

        try {
            FileSystemOptions opts = new FileSystemOptions();
            FtpFileSystemConfigBuilder ftpBuilder = FtpFileSystemConfigBuilder.getInstance();
            ftpBuilder.setPassiveMode(opts, passive);
            /** 强制不校验IP */
            ftpBuilder.setRemoteVerification(opts, false);
            ftpBuilder.setFileType(opts, FtpFileType.BINARY);
            ftpBuilder.setConnectTimeout(opts, 10000);
            ftpBuilder.setSoTimeout(opts, 10000);
            ftpBuilder.setControlEncoding(opts, DefaultCharset.name);

            try (FileObject fo = fsManager.resolveFile(filePath, opts);
                 OutputStream output = fo.getContent().getOutputStream()) {
                IOUtils.copyLarge(new ByteArrayInputStream(fileByte), output);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            throw e;
        }
    }

}


二、服务管理平台创建接口编写上传ftp接口代码

1、打开服务管理平台

服务管理平台.png

2、创建接口写上相关代码

创建接口.png

FTP.png


/*
* resources.getEntityManagerContainer() // 实体管理容器.
* resources.getContext() //上下文根.
* resources.getOrganization() //组织访问接口.
* requestText //请求内容.
* request //请求对象.
*/



try{
    var result = {
       
    }

    //FTP信息配置
    var FTPhost = "172.16.92.23"; //FTP服务器IP
    var FTPport = 21;   //FTP服务器端口
    var FTPuserName = "wwx";    //FTP服务器登录用户名
    var FTPpassword = "wwx";    //FTP服务器登录密码

    var FTPpath = "upload";     //存放文件的目录    
    var fileName = "测试.docx";   
    var filePath = "D:\\"+fileName; //需上传的文件
    

    var documentManager = Java.type('com.z.custom.DocumentManager'); //实例化java类
    
    strpath = "ftp://"+FTPuserName+":"+FTPpassword+"@"+FTPhost+"/"+FTPpath+"/"+fileName;
  
    //调用方法进行上传
    documentManager.writeByteToFile(strpath, documentManager.readFileToByte(filePath,"utf-8"), "utf-8",true);

    result.type = "success";
    result.message = "成功";
    
}catch(e){
    e.printStackTrace();
    result.type = "error";
    result.message = "失败";
    result.data = e.name + ": " + e.message
}
//JSON.stringify(result);
this.response.setBody(result,"application/json");

推荐文章:

移动办公-将平台集成到企业微信(WeChat)
2021-11-16
@移动办公@O2OA微信办公@企业微信办公@微信办公@手机办公O2OA平台拥有配套的原生开发的安卓和IOS移动APP,可以以自建应用的方式集成到企业微信,同步企
开发知识-O2OA平台启用Eruda进行移动端调试
2021-02-07
//reload--是否重新加载页面。true表示重新加载页面;默认falseo2.debug(reload);
系统配置-服务器端口冲突和端口修改
2021-02-25
在安装O2OA的服务器上很可能已经启用了IIS、apache或者nginx等服务器,已经有其他的应用或者web站点正在运行中,所以O2OA启动所需要的80端口已
业务开发-组织架构-组织管理者设定
2021-02-26
O2OA提供多级组织架构设置能力,用户可以在系统内设置集团、分公司、部门、小组等多级企业组织结构来满足办公需要。本文主要介绍如何在O2OA中设定组织的管理者实现
常见问题-服务器错误:can not decrypt token
2021-02-07
cannotdecrypttoken服务端无法解开token,可能的原因是,xadmin的密码刚刚修改过而前台没有刷新页面.重新刷新前台页面即可,app端需要重
开发知识-JQuery篇:如何在O2OA中使用Jquery
2021-02-07
O2OA平台默认使用的JavaScript框架是mootools,有些用户对mootools框架不是很熟悉,造成使用上一些学习成本。平台也提供其他js库的引用,
企业办公首页使用说明
2021-02-19
O2OA企业办公首页的导航栏中,有直观清爽的界面、功能丰富的应用。根据企业办公需求随心使用,包含流程管理、会议管理、组织管理、日程管理等等。
平台服务器主机架构配置推荐
2021-11-27
@平台部署@O2OA@开源办公系统@操作系统@集群架构 @服务器架构@主机架构图O2OA开发平台支持公有云,私有云和混合云部署,也支持复杂的网络结构下的分布式部
数据中心-导入模型设置
2021-08-09
ImporterV6.2版本中,O2OA增加了导入模型配置。导入模型可以让开发者通过配置,实现用户导入Excel数据到系统中,形成内容管理文档、流程管理工作和自
开发知识-单个端口模式的Nginx和系统配置
2021-02-07
配置目的部分企事业单位外网地址不能开通太多的端口,我们使用单个端口,上下文根的方式配置访问地址。Nginx服务器域名:harbor.o2oa.net(172.1

results matching ""

    No results matching ""