用Visual C++实现SSL下Word文件发布
来源:互联网 发布:荣威rx3 知乎 编辑:程序博客网 时间:2024/04/25 09:54
某网站项目后台管理要求实现一个功能,通过Word文件上传的方式实现文档发布功能。流程如下:用户选择一个word文档,系统自动识别出标题部分,并把余下的部分转化为HTML后作为正文发布。
原本的设计思路是把word上传到后台,由java对文档进行解析。一番周折后,发现java对word的支持并不理想,而且存在乱码问题。权衡再三,决定在客户端使用ActiveX控件。由控件实现对word文档的解析,并自动上传。
对word文档的解析亲自做起来才发现困难重重。通过#import或向导方式只能实现对某一版本的word文档的支持。word的版本从word97开始,分别经历了word2000、wordXP、word2002、word2003、以及当前的word2007。参考了大量的实现方案,发现微软的autowrap方案最为理想:http://support.microsoft.com/kb/216686/zh-cn。该方案把COM的IDispatch接口进行封装,通过模拟脚本调用的方式调用COM属性和方法,而且可以实现缺省参数调用,解决我这种问题相当优雅。
这样,通过_document的saveas方法,就可以把word转化为html。接下来的问题是,如何打包上传。第一个问题是如何打包,自然而然的想到zip。由于MFC不提供zip支持,而官方的zlib库无法实现文件夹压缩。以前的一个项目由于找不到解决方案,只能用rar的方式替代,缺点是必须带上rar的可执行文件。最终在CodeProject上找到一款非常好用的c++源码,Zip Utils:http://www.codeproject.com/KB/files/zip_utils.aspx。用法非常的简单,只需要包含一个zip.h即可。创建一个zip文件只需要以下几步:
最后一步便是文件的上传了。这好办,网上利用HTTP实现文件上传的代码很多,找来个能用的稍微改改,编译通过。用php写了个脚本,测试正常。
兴冲冲的发布。到了测试那里出现了问题,他用的是tomcat下的FileUpload类,竟然出现异常,而网上关于此异常竟然没有人给出解决方案。百思不得其解,但HTTP隐藏在平静的水面下,到底出了什么问题,只有分析HTTP头了。
安装了Fiddler2,编写了一个Servlet类,开始测试。为了做对比,用HTML的Form写了个上传表单,上传相同的文件,然后同控件上传的HTTP头进行对比。比较了半天,发现二者除了Agent之类信息之外,基本相同。都快绝望了,在UltraEdit中一行一行的盯,突然发现,IE产生的HTTP头在两个字段之间多了一个换行。带着怀疑的态度,我试着加了个换行……点击运行,竟然通过了。问题找到了,是我改的太狠,把代码中的应该有的/r/n给一起删了,原来还以为这是多余的。原来如此,这就是协议,来不得半点虚假。
于是打包,发布,客户测试都正常了,代码也扔一边去了。突然有一天,在讨论系统的安全性时,突然想到,客户后台都是通过HTTS+USB Key登录的,文件发布却是HTTP,这问题有点严重。
赶紧找到源码开始修改,却发现一下子束手无措,自己对SSL几乎是一知半解。通过MSDN知道,要实现HTTPS传输,只需要在MFC的OpenRequest中传入INTERNET_FLAG_SECURE参数。心想这么简单,代码一改赶紧测试,却发现SendRequest调用后直接返回异常:客户端无效授权。又去查MSDN,终于弄明白原因,写出以下代码解决问题:
问题圆满解决。
- 用Visual C++实现SSL下Word文件发布
- Visual C#实现文件分割合并器
- C#.NET实现Word或Excel文件转为HTML文件
- C#.NET实现Word或Excel文件转为HTML文件
- 用word发布博客
- 【c#】也说C#实现对Word文件读写
- 用jacob实现word文件的追加
- 用MFC实现打开word文件
- Windows下apache 实现 SSL
- 免费HTTP上传文件控件WebUploadFile.ocx发布,让实现Word在线编辑器变得容易
- Visual Studio 2005 发布网站提示发布成功 但指定文件夹下没任何文件问题的解决
- 用Visual C++.NET实现XML解析
- 用Visual C#实现局域网点对点通讯
- 用Visual C#实现局域网点对点通讯
- 用Visual C#实现局域网点对点通讯
- 用Visual C#实现局域网点对点通讯
- 用Visual C#实现局域网点对点通讯
- 用Visual C#实现局域网点对点通讯
- 面向对象 创建多个TABSTRIP
- 对于每个复杂的问题都会有一个简单但不准确的答案
- Google 作为新闻被炒作了一周,扫 yellow 不知道能持续多久
- 开始 2010
- 信息化管理——畜牧企业发展的必经之路
- 用Visual C++实现SSL下Word文件发布
- 测试
- 【自然框架】稳定版beta1的Demo —— 四:角色管理。另外 在线演示 终于搞定了
- 【自然框架】稳定版的Demo —— 三:主从表的维护方式
- 【自然框架】稳定版的Demo——看点二:权限,权限过滤与验证。
- 【自然框架】稳定版beta1——源码下载,Demo说明
- 增删改查不是万能的,但是万万不能没有增删改查——限信息管理类
- 使用IE6看老赵的博客——比较完美版(可以在线查看、回复)
- 使用wiresshark抓包