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、打开服务管理平台
2、创建接口写上相关代码
/*
* 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");
推荐文章:
服务集成-与外部系统数据交互
2021-03-03
O2OA允许用户自行修改源码或者增加源码来扩展系统服务,也可以包装功能更强的业务服务。本文主要介绍如何在O2OA中开发接口与外部系统进行数据交互。
系统架构-基于nginx快速集群部署-端口分发
2021-04-09
O2OA平台使用分布式架构设计,提供灵活的扩展方案用于对服务器的负载能力进行扩展,保障系统的高可用性。本篇主要介绍如何基于nginx端口分发的方式快速集群部署。
密码管理-普通用户初始化密码设置
2021-02-25
O2OA可以配置新用户初始化密码的规则。本篇主要介绍如何配置新用户初始化密码的规则。
运营商公文使用说明
2021-02-18
O2OA演示环境。它并不是一款传统意义上的OA系统。它是一款以流程管理为核心的全开源全免费的信息化开发平台,完整的代码可以直接在Github和Gitee上下载,
简单的费用报销审批流程开发
2021-03-05
本篇主要使用实例开发的方式讲述如何在O2OA平台中开发一个简单的费用报销流程,包括流程设计,配置,表单设计,条件判断以及如何验证流程开发成果。
水印安全-附件水印|加密|文档格式转换图片|PDF
2021-02-07
O2OA使用扩展程序实现附件水印,加密,文档格式转换图片,PDF等功能.
常见问题-如何通过脚本调用系统内服务
2021-02-07
varapplications=this.applications;varserviceRoot="x_query_assemble_surface";vart
常见问题-数据导出或者导入时发生OOM异常
2021-02-07
现象描述:OOM异常Exceptioninthread"main"java.lang.OutOfMemoryError:Requestedarraysizeex
门户开发-门户脚本开发
2021-03-01
O2OA提供的门户管理平台可以让用户自由地为企业定制符合企业特色的门户系统,门户页面。可以让页面展现的内容真正满足企业自身的需求。本文主要介绍如何在O2OA中使
企业办公首页使用说明
2021-02-19
O2OA企业办公首页的导航栏中,有直观清爽的界面、功能丰富的应用。根据企业办公需求随心使用,包含流程管理、会议管理、组织管理、日程管理等等。