DCS服务
运行环境:
jre8、apache-tomcat-8.0.26、nginx以及转换所需的字体。
部署流程(linux下):
▪ 安装JDK8 这里使用的是压缩版的JDK 解压文件
tar -zxvf jdk-8u60-linux-x64.tar.gz 修改环境变量 vi /etc/profile
JAVA_HOME=/home/admin/web/jdk8
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
并让配置文件生效
source /etc/profile
在终端使用echo命令检查环境变量设置情况:
#echo $JAVA_HOME
#echo $CLASSPATH
#echo $PATH
检查JDK是否安装成功:
#java –version
▪ Tomcat的配置部署 解压文件
tar -zxvf apache-tomcat-8.0.26.tar.gz
▪ 部署DCS工程 把永中DCS工程目录复制到tomcat
的webapp目录下。
修改${tomcat.home}\conf\server.xml文件.在Host节点下增加如下参考代码:
reloadable="true"/> 根据需要修改项目中 ${dcs.web}\WEB-INF\config.properties和log4j.properties的配置。需要在目录/usr/X11R6/lib/X11/fonts/TrueType下加入字体文件。 启动tomcat后,访问http://localhost:8080/dcs.web 即可看到“在线文档预览示例”页面。 ▪ 安装nginx tar -zxvf nginx-1.9.2.tar.gz 进入 nginx 文件夹 cd nginx-1.9.2 执行 ./configure 可能会遇到系统缺少库 问题: 1:./configure: err: C compiler cc is not found 缺少gc++库文件 su root cd / yum -y install gcc gcc-c++ autoconf automak 等待 complete 2:./configure: error: the HTTP rewrite module requires the PCRE library su root yum -y intall pcre pcre-devel 等待complete 3:./configure:error: the HTTP gzip module requires the zlib library yun -y install zlib zlib-devel 解决所有问题后 再次 ./configure make make install 安装完成后对/usr/local/nginx/conf/nginx.conf 配置文件进行所需配置。 集群配置 按以上步骤在多台服务器上安装配置好tomcat 并启动,确认tomcat 启动成功,在nginx服务配置文件nginx.conf中进行集群相关配置。 例如三台服务器,其中192.168.1.100为ngnix服务器,192.168.1.101为第一台DCS服务器,192.168.1.102为第二台服务器, 则nginx.conf相关配置为: #设定负载均衡的服务器列表 upstream tomcat_server { server 192.168.1.101:80; server 192.168.1.102:80; } 注意: windows 及 mac os下,jdk请尽量使用安装包.exe,.dmg安装,安装程序将自动配置环境变量。 linux下如果遇到如下提示 -bash: /usr/java/jdk1.8.0_65/bin/java: Permission denied 则表明文件或文件夹没权限,请执行如下操作 chmod -R 777 /usr/java/jdk1.8.0_65 部署流程(windows下): ▪ 安装JDK8 首先下载JDK,下载页面地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html; 修改环境变量:右击“计算机”,在右键菜单中点击“属性”,在弹出窗口中点击“高级系统设置”,选择“高级”选项卡,点击“环境变量”按钮; 需要设置三个属性“JAVA_HOME”、“path”、“classpath”。 一:点“新建”,然后在变量名写上JAVA_HOME,然后在变量值写入刚才安装的路径“C:\jdk1.8”。 二:其次在系统变量里面找到path,然后点编辑,path变量的含义就是系统在任何路径下都可以识别java命令,则变量值为“.;%JAVA_HOME%\bin”,(其中“%JAVA_HOME%”的意思为刚才设置JAVA_HOME的值),也可以直接写上“C:\jdk1.6\bin” 三: 最后再点“新建”,然后在变量名上写classpath,该变量的含义是为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别。其值为“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\toos.jar (要加.表示当前路径)”,与相同“%JAVA_HOME%有相同意思” 检查JDK是否安装成功: #java –version ▪ Tomcat的配置部署 tomcat下载页面地址: http://tomcat.apache.org/ 解压文件 ▪ 部署DCS工程 把永中DCS工程目录复制到tomcat 的webapp目录下。 修改${tomcat.home}\conf\server.xml文件.在Host节点下增加如下参考代码: reloadable="true"/> 根据需要修改项目中 ${dcs.web}\WEB-INF\config.properties和log4j.properties的配置。需要在目录/usr/X11R6/lib/X11/fonts/TrueType下加入字体文件。 启动tomcat后,访问http://localhost:8080/dcs.web 即可看到“在线文档预览示例”页面。 ▪ 安装nginx nginx下载页面地址: http://nginx.org/ 安装完成后对/usr/local/nginx/conf/nginx.conf 配置文件进行所需配置。 集群配置 按以上步骤在多台服务器上安装配置好tomcat 并启动,确认tomcat 启动成功,在nginx服务配置文件nginx.conf中进行集群相关配置。 例如三台服务器,其中192.168.1.100为ngnix服务器,192.168.1.101为第一台DCS服务器,192.168.1.102为第二台服务器, 则nginx.conf相关配置为: #设定负载均衡的服务器列表 upstream tomcat_server { server 192.168.1.101:80; server 192.168.1.102:80; } 接口说明: ▪ 上传文档 请求地址: POST http://服务器地址/upload 例如:http://localhost:8080/dcs.web/upload 上传您要在线预览的文档。 参数: file - 文件作为multi-part POST请求参数,用于上传本地文档 (必须) convertType - 转换类型参数(必须) ▪ URL预览文档 请求地址: POST http://服务器地址/onlinefile 参数: downloadUrl - 文档URL,用于预览网络文档。此URL应为编码(UTF-8 URL-encoded)后的URL。 convertType - 转换类型参数 (cookie) - (非必传)下载文件所需的cookie信息 ▪ 服务器本地转换 请求地址: POST http://服务器地址/convert 参数: inputDir - 文档在服务器上的路径(相对于配置文件中input的相对路径) (mergeInput) - (非必传)使用文档合并功能时,需要合并的文档路径同inputDir,可传多个值,以英文,分隔 convertType - 转换类型参数 ▪ html网页转pdf 请求地址: POST http://服务器地址/htmltopdf 参数: htmlurl - 需要转换的html地址 通用参数不适用于此接口 ▪ 文档转swf 请求地址: POST http://服务器地址/anytoswf 参数: Type - upload/onlinefile/convert isPic - 是否以图片形式展示 upload-文件上传参数: file - 文件作为multi-part POST请求参数,用于上传本地文档 (必须) onlinefile-Url下载参数: downloadUrl - 文档URL,用于预览网络文档。此URL应为编码(UTF-8 URL-encoded)后的URL。 convert-服务器本地转换参数: inputDir - 文档在服务器上的路径(相对于配置文件中input的相对路径) 通用参数不适用于此接口 ▪ 获取授权码 请求地址: http://服务器地址/getRegisterCode ▪ 查询版本及授权到期情况 请求地址: http://服务器地址/queryInfo ▪ 查询实时可用实例个数 请求地址: http://服务器地址/countConverter <通用参数> htmlName - 转换成html显示的文档名字(默认值:原文档名字) htmlTitle - 转换成html显示的htmltitle名字(默认值:永中文档转换服务) isCopy - 是否防复制(1是0否,默认0) isShowAll - 是否一次性加载(1是0否,默认0(分页加载)) isZip - 是否提供打包下载(1是0否,默认0),返回值增加 zipUrl结果 isShowTitle - 是否显示文件名(1是0否,默认1) isDelSrc - 是否删除源文件(1是0否,默认0) isDelTarget - 是否删除生成的文件(1是0否,默认0,需要isZip为1时才生效) isSourceDir - 是否在结果集中返回源文档相对路径 isShowList - 是否显示文档目录(1是0否,默认0) showFooter - 是否显示页脚(1是0否) encoding - 转换时所需要的编码(默认值:UTF-8) password - 转换文档如有密码通过这个参数传入密码 callbackName - 用于跨域调用时设置回调函数的名字(会改变返回值的样式) pages - 应用于转换成多个文件时(如MS到图片格式,转多个SVG),以 英文标识,逗号 分隔 ;-表示 范围 例如(1,3-5 表示 1,3,4,5) position - 静态水印的位置(ofd预览) wmSize - 设置水印尺寸默认100(int类型) wmContent - 设置水印文字内容默认水印 wmFont - 设置水印字体 wmSpace - 设置静态水印间距 wmTransparency- 设置静态水印透明度 wmSuspend-静态文件内容是否在文字上方还是下方,默认在下方,输入1是上方 wmRotate - 设置静态水印内容旋转角度 wmWord - word给word加入文字或图片水印,默认是不加,设置为1是加入水印 wmTileEffect - 是否是平铺效果,默认是的,0表示不是平铺(显示为一个水印) wmRgb - 颜色是否使用rgb方式,默认是0,不选,1是使用 wmRgbRed - rgb红范围是0~255 wmRgbGreen - rgb绿范围是0~255 wmRgbBlue - rgb蓝 范围是0~255 zoom - 设置图片的缩放比例(默认1f) wmColor - 设置水印颜色(int类型) 1,"黑色"、2,"蓝色"、3,"青色"、4,"深灰" 、5,"灰色"、6,"绿色"、7,"浅灰" 、8,"品红"、9,"橙色"、10,"粉红"、11,"红色"、12,"白色" 、13,"黄色" 转换类型参数说明: wmPicPath - 设置图片水印的图片路径(相对于配置文件中WmImagePath的相对路径) acceptTracks - 是否显示文档批注(1显示0不显示) isHideBlank - 是否隐藏空白(1隐藏0不隐藏) isVertical - 是否竖排(1是0否,默认0) isPrint - 是否显示打印(1是0否,默认1) isDownload - 生成页面是否提供原文档下载(1是0否,默认0) htmlPath - 自定义生成html中的相对路径 isShowNum - 是否显示总页数(1显示,0不显示,默认1) dynamicMark - 动态水印内容 dmXextra - 动态水印x轴内容之间距离 dmYextra - 动态水印y轴内容之间距离 dmFontSize - 动态水印的文字大小 dmAlpha - 动态水印的透明度(范围是0到1) dmAngle - 动态水印旋转角度 dmFont - 动态水印字体 dmColor - 动态水印颜色,rgb方式,如rgb(0,0,0),#000000 destinationName - 自定义生成的文件名(不需要后缀,不推荐使用) appendPath - 自定义在设置的output路径的基础上追加路径(不推荐使用) antiDownload - 生成页面是否防下载(1是0否,默认0) isFullScreen - 是否全屏(1是0否,默认0) pdfTitle - 设置生成pdf时pdf的标题 pdfAuthor - 设置生成pdf时pdf的作者 pdfSubject - 设置生成pdf时pdf的主题 pdfKeyword - 设置生成pdf时pdf的关键字 sourceReplace - 文档中需要被替换的内容,以英文,分隔 targetReplace - 文档中要替换的内容,以英文,分隔,和sourceReplace对应 isAsync - 是否后台异步转换 compressedSuffix - 压缩包后缀名 supportCache - 是否开启缓存(1是0否,默认0) isShowGridline - 是否添加表格边框(1是0否,默认0) isSignature - 是否进入签批模式(1是0否) suffix - 传入后缀名(对于上传的文件没有后缀名,我们可以根据这个参数强制修改) isRar5 - 是否使用rar5的方式解压 imageType;//图片转图片,生成图片的后缀名,默认是jpg wordEdit;//word转word之后,设置是否可编辑,默认可以编辑,1不可以编辑 isFirstImage;//加入图片水印,设置是否是第一页加入,默认不是,为1时就是在第一页加入 isExcelWidth;//调整excel单元行的宽度,默认不调整,当为1时调整 isPdfBmp;//生成pdf是否是以绘图的方式,默认不是,设置为1是的 isAshPlacing;//对word生成word的红头文件做置灰处理,默认不置灰,1置灰 isPdfA4;//office格式生成pdf,设置每一页为A4大小,默认不是,1是 convertType参数取值说明: 0-----文档格式到高清html的转换 1-----文档格式到html的转换 2-----文档格式到txt的转换 3-----文档格式到pdf的转换 4-----文档格式到gif的转换 5-----文档格式到png的转换 6-----文档格式到jpg的转换 7-----文档格式到tiff的转换 8-----文档格式到bmp的转换 9-----pdf文档格式到gif的转换 10----pdf文档格式到png的转换 11----pdf文档格式到jpg的转换 12----pdf文档格式到tiff的转换 13----pdf文档格式到bmp的转换 14----pdf文档格式到html的转换 15----html文档格式到微软文档格式的转换 16----文档转换多个SVG返回分页加载页面(模版) 17----tif文件转成html 18----文档转换多个SVG 19----压缩文件到html的转换(模版) 20----PDF文件到html的转换(模版) 21----ofd文件到html的转换(模版) 22----两个doc文档合并 23----图片到html的转换 24----pdf文档格式到txt的转换 25----文档按页转换(高清版) 26----文档按页转换(标准版) 27----获取文档页码(MS文档) 28----获取pdf页码(PDF文件) 29----文档到ofd的转换 30----文档到html(图片)的转换 31----多个pdf文档合并 32----图片到pdf的转换 33----文档到文档的转换 34----pdf到pdf的转换 35----tif到html的转换(模板) 36----epub到html的转换(模板) //需要安装相应的客户端 37----indd格式到pdf的转换 38----cad格式到pdf的转换 39----psd格式到pdf的转换 40----ai格式到pdf的转换 41----cdr格式到pdf的转换 42----其它格式转换到pdf格式预览(高清模板) 43----文档格式到uof的转换 44----图片到图片的转换(默认是jpg) 45----视频到mp4的转换 46----获取ofd里面的内容 47----图片转ofd 48----ofd转ofd(主要是插入元数据) 49----ofd的合并 50----html格式到pdf转换 51----html格式到ofd的转换 52----其它格式转换到ofd格式预览(高清模板) 返回参数说明: result - 返回代码,0成功,其他失败 message - 详细信息 data - 请求需要返回的数据 返回参数含义: 0-----转换成功 1-----找不到指定文档 2-----无法打开指定文档 3-----操作失败 4-----转换的文档为加密文档或密码有误,请重新添加password参数进行转换 5-----输出文档后缀错误 6-----授权文件过期 7-----转换超时,内容可能不完整 8-----无效参数 17-----上传失败 18-----下载文件失败 19-----文件过大 20-----下载成功 21-----删除失败 22-----获取文件信息失败 23-----URL编码失败 24-----生成文件名为空,有误或重名,请检查参数 25-----html转pdf转换失败 26-----获取授权码失败,请联系我们 27-----pdf转swf转换失败 28-----需要合并的文档不存在 29-----加密字符解码失败 30-----解压文件失败,该压缩文件不支持 31-----该文件转换异常已记录,转换失败 32-----服务器转换实例已用完,请稍后再试 33-----该文件是个空文件 34-----签批生成失败 35-----文件已被锁住,提交失败 36-----修改文件后缀名失败 37-----字节数组生成文件失败 38-----接收base64生成图片失败 39-----此ip无法预览 例如: 成功状态下:{ "result":0,"data":"http://xxxx域名/文件地址","message":"转换成功" } 失败状态下: { "result":7, "":"上传失败" } 调用说明: WEB调用 Web调用需要配置jquery组件,用到ajax,需要配置ajaxfileupload.js。web要视具体情况来编写代码,下面代码为核心调用部分。 a) 上传本地文件转换代码示例 $('#upfilebtn2').fileupload({ url : 'upload', dataType : 'json', formData : { convertType : "0" },//如果需要额外添加参数可以在这里添加 done : function(e, data){ $.isLoading("hide"); }, }); b) URL文档转换代码示例 $.ajax({ url : "onlinefile", data :{ "downloadUrl" : obj_value, "convertType" : "0" }, dataType : "json", type : "post", success : function(data){ $.isLoading("hide"); }, error : function(data){ $.isLoading("hide"); console.error(data) } }); 客户端调用 客户端调用接口,需要用POST请求,具体代码需要视开发语言而定,下面列举部分语言作为参考。 Java调用 Java 调用代码适用于J2SE及Java EE。 需要用到的第三方工具包为:commons-logging-1.1.jar,httpclient-4.5.jar,httpcore-4.4.1.jar,httpmime-4.5.jar,如代码出现编译不过,请加入这四个包。 代码编译环境:Eclipse import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.nio.charset.Charset; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.ParseException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; /** * @Description: DCS文档转换服务Java调用代码示例 * @author LB * @date 20151014 */ public class DCSTest { public static String sendPost(String serverurl,Map< String,String> param){ String result=""; List< NameValuePair> list = new ArrayList< NameValuePair>(); String fullurl =""; //请求参数 for(String key : param.keySet()) { list.add(new BasicNameValuePair(key, param.get(key))); } try{ fullurl = EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8)); }catch(Exception e){ result ="下载失败"; e.printStackTrace(); } HttpPost httpget = new HttpPost(serverurl+"?"+fullurl); CloseableHttpClient httpclient = HttpClients.createDefault(); try (CloseableHttpResponse response = httpclient.execute(httpget)){ if (response.getStatusLine().getStatusCode() == 200) { HttpEntity resEntity = response.getEntity(); byte [] josn = EntityUtils.toByteArray(resEntity); requestJson = new String(josn,"UTF-8"); EntityUtils.consume(resEntity); }else{ result="下载失败"; } } catch (Exception e) { result="下载失败"; e.printStackTrace(); } finally{ httpget.releaseConnection(); } return result; } /** * 向指定 URL 上传文件POST方法的请求 * * @param url 发送请求的 URL * @param filepath 文件路径 * @param type 转换类型 * @return 所代表远程资源的响应结果, json数据 */ public static String SubmitPost(String url, String filepath, String type) { String requestJson = ""; HttpClient httpclient = new DefaultHttpClient(); try { HttpPost httppost = new HttpPost(url); FileBody file = new FileBody(new File(filepath)); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName("UTF-8")); reqEntity.addPart("file", file); // file为请求后台的File upload;属性 reqEntity.addPart("convertType", new StringBody(type, Charset.forName("UTF-8"))); httppost.setEntity(reqEntity); HttpResponse response = httpclient.execute(httppost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity resEntity = response.getEntity(); byte [] josn = EntityUtils.toByteArray(resEntity); requestJson = new String(josn,"UTF-8"); EntityUtils.consume(resEntity); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); // requestJson = e.toString(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); // requestJson = e.toString(); } finally { try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) { } } return requestJson; } public static void main(String[] args) { // TODO Auto-generated method stub // 文件上传转换 String convertByFile = SubmitPost("http://dcs.yozosoft.com:80/upload", "C:/doctest.docx", "1"); // 网络地址转换 Map< String,String> map =new HashMap< String,String>(); map.put("downloadUrl", "http://www.yozodcs.com/example/doc/doctest.docx"); map.put("convertType", "1"); String convertByUrl =sendPost("http://dcs.yozosoft.com/onlinefile",map); System.out.println(convertByFile); System.out.println(convertByUrl); } } httpclient4.x版本调用 //上传文件 public static String postParams(String url, String filepath, String type) { CloseableHttpClient httpclient = HttpClients.createDefault(); CloseableHttpResponse response = null; String result = null; try { HttpPost httpPost = new HttpPost(url); MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE); mEntityBuilder.setCharset(Charset.forName("UTF-8")); FileBody file = new FileBody(new File(filepath)); mEntityBuilder.addPart("file", file); StringBody comment = new StringBody(type, ContentType.APPLICATION_JSON); mEntityBuilder.addPart("convertType", comment); HttpEntity reqEntity =mEntityBuilder.build(); httpPost.setEntity(reqEntity); response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity resEntity = response.getEntity(); byte [] josn = EntityUtils.toByteArray(resEntity); result = new String(josn,"UTF-8"); EntityUtils.consume(resEntity); } } catch (Exception e) { e.printStackTrace(); } finally { HttpClientUtils.closeQuietly(httpclient); HttpClientUtils.closeQuietly(response); } return result; } C++调用 C++调用,需要通过socket封装http请求,本例展示URL调用方法,文件上传类似。 编译环境VS2005,win32控制台 // DCSTest.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include "DCSTest.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯一的应用程序对象 CWinApp theApp; #include iostream #include string #include Winsock2.h using namespace std; //函数声明 int httpPost(char* hostname, char* api, char* parameters); //方法调用 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs _tprintf(_T("Fatal Error: MFC initialization failed\n")); return 1; } httpPost("dcs.yozosoft.com", "http://dcs.yozosoft.com:80/onlinefile", "downloadUrl=http://img.iyo cloud.com:8000/doctest.docx&convertType=1"); system("pause"); return nRetCode; } /* *post 请求 *参数:hostname 域名 * api 接口 * parameters 参数,请求参数应该是name1=value1&name2=value2 的形式。 *返回:正确0,否则,错误代码 */ int httpPost(char* hostname, char* api, char* parameters) { WSADATA WsaData; WSAStartup(0x0101, &WsaData); //初始化socket struct hostent* host_addr = gethostbyname(hostname); if (host_addr == NULL) { cout<<"Unable to locate host"; return -103; } sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons((unsigned short)80); sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list); int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { return -100; } //建立连接 if (connect(sock, (const struct sockaddr *)&sin, sizeof(sockaddr_in) ) == -1) { cout<<"connect failed"; return -101; } //初始化发送信息 char send_str[2048] = {0}; //头信息 strcat(send_str, "POST "); strcat(send_str, api); strcat(send_str, " HTTP/1.1\r\n"); strcat(send_str, "Host: "); strcat(send_str, hostname); strcat(send_str, "\r\n"); strcat(send_str, "Connection: keep-alive\r\n"); char content_header[100]; sprintf(content_header,"Content-Length: %d\r\n", strlen(parameters)); strcat(send_str, content_header); strcat(send_str, "Cache-Control: max-age=0\r\n"); strcat(send_str, "Origin: http://dcs.yozosoft.com\r\n"); strcat(send_str, "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like G ecko) Chrome/15.0.849.0 Safari/535.1\r\n"); strcat(send_str, "Content-Type: application/x-www-form-urlencoded\r\n"); strcat(send_str, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r \n"); strcat(send_str, "Referer: http://dcs.yozosoft.com/\r\n"); strcat(send_str, "Accept-Encoding: gzip,deflate,sdch\r\n"); strcat(send_str, "Accept-Language: zh-CN,zh;q=0.8\r\n"); //内容信息 strcat(send_str, "\r\n"); strcat(send_str, parameters); if (send(sock, send_str, strlen(send_str),0) == -1) { cout<<"send failed"; return -101; } //获取返回信息 char recv_str[4096] = {0}; if (recv(sock, recv_str, sizeof(recv_str), 0) == -1) { cout<<"recv failed"; return -101; } cout<<"recv_str"; WSACleanup( ); return 0; } PHP调用 Ⅰ URL Post请求 $url="http://dcs.yozosoft.com/onlinefile"; $uri="http://dcs.yozosoft.com/example/doc/doctest.docx"; $response=onlinefile($url, $uri); echo $response; function onlinefile($url, $uri) { $data=array('downloadUrl'=> 'http://dcs.yozosoft.com/example/doc/doctest.docx','convertType'=> '1'); $data = http_build_query($data); $params = array('http' => array( 'method' => 'POST', 'content' => $data ) ); print_r($params); $ctx = stream_context_create($params); $fp = file_get_contents($url, false, $ctx); if (!$fp) { return false; } return $fp; } Ⅱ 上传文件 function send_file($url, $post = '', $file = '') { $eol = "\r\n"; $mime_boundary = md5 ( time () ); $data = ''; $confirmation = ''; date_default_timezone_set ( "Asia/Beijing" ); $time = date ( "Y-m-d H:i:s " ); $post ["filename"] = $file [filename]; foreach ( $post as $key => $value ) { $data .= '--' . $mime_boundary . $eol; $data .= 'Content-Disposition: form-data; '; $data .= "name=" . $key . $eol . $eol; $data .= $value . $eol; } $data .= '--' . $mime_boundary . $eol; $data .= 'Content-Disposition: form-data; name=' . $file [name] . '; filename=' . $file [fi lename] . $eol; $data .= 'Content-Type: text/plain' . $eol; $data .= 'Content-Transfer-Encoding: binary' . $eol . $eol; $data .= $file [filedata] . $eol; $data .= "--" . $mime_boundary . "--" . $eol . $eol; $params = array ('http' => array ('method' => 'POST', 'header' => 'Content-Type: multipart/ form-data;boundary=' . $mime_boundary . $eol, 'content' => $data ) ); $ctx = stream_context_create ( $params ); $response = file_get_contents ( $url, FILE_TEXT, $ctx ); return $response; } C#调用 Ⅰ URL Post请求 public string HttpPost(string Url, string postDataStr) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr); request.CookieContainer = cookie; Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Cookies = cookie.GetCookies(response.ResponseUri); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } Ⅱ 上传文件 public static string HttpUploadFile(string url, string path, int Content_Type){ FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); byte[] bArr = new byte[fs.Length]; fs.Read(bArr, 0, bArr.Length); fs.Close(); int pos = path.LastIndexOf("\\"); string fileName = path.Substring(pos + 1); string boundary = "Boundary-b1ed-4060-99ls-fca7ff59c113"; //Could be any string string Enter = "\r\n"; //part 1 注意 filename 不支持中文 string part1 = "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; filename=\"" + "fileName.doc" + "\"; name=\"file\"" + Enter + Enter; //part 2 string part2 = Enter + "--" + boundary + Enter //+ "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"convertType\"" + Enter + Enter + Content_Type + Enter //以下是我们的通用参数 //start + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"edcoding\"" + Enter + Enter + "utf-8" + Enter //end //start /* + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"htmlTitle\"" + Enter + Enter + "ZnuotechWord" + Enter //end //start + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"isShowTitle\"" + Enter + Enter + "0" + Enter //end //start + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"showFooter\"" + Enter + Enter + "0" + Enter */ //end + "--" + boundary + "--"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "multipart/form-data;boundary=" + boundary; Stream myRequestStream = request.GetRequestStream(); myRequestStream.Write(Encoding.UTF8.GetBytes(part1.ToString()), 0, part1.Length); myRequestStream.Write(bArr, 0, bArr.Length); myRequestStream.Write(Encoding.UTF8.GetBytes(part2.ToString()), 0, part2.Length); myRequestStream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); //log(retString); myStreamReader.Close(); myResponseStream.Close(); return retString; } static void Main() { string url = "http://localhost:8080/dcs.web/upload"; string data = "C:/1.txt"; string result = HttpUploadFile(url, data, 1); Console.WriteLine(result); } } JVM调优说明 : 关于DCS中实例数的设置:我们一般推荐客户按照服务器的硬件条件来设置 例如服务器可用为4核配8G内存,并发可设置4-8个,我们推荐1核1g内存设置1个并发实例 tomcat的性能优化: 根据设置的实例数和服务器剩余内存数来设置jvm的内存设置 Ⅰ window下: 在window下的tomcat/bin下的catalina.bat中首行加入set JAVA_OPTS=-Xms***m -Xmx***m Ⅱ Linux下: 在linux下的tomcat/bin下的catalina.sh中首行加入JAVA_OPTS="$JAVA_OPT -Xms***m -Xmx***m" 其中Xms表示启动所需最小内存,Xmx表示可用最大内存,***根据实际情况设置