Chinaunix首页 | 论坛 | 博客
  • 博客访问: 81374
  • 博文数量: 12
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 144
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-30 13:44
文章分类

全部博文(12)

文章存档

2017年(1)

2008年(4)

2007年(7)

我的朋友

分类: 系统运维

2007-11-06 19:07:40

dsoframer是微软提供一款开源的基于web的office ActiveX控件,国内有达人在源码的基础上做了很多修改,增强了控件的功能。其实基于web的office是一个很鸡肋的东西,没有什么存在的意义。唯一的一点就是看上去比较花哨,你瞧,在浏览器上打开word文档,多吊啊。不知道原版dsoframer是否带有直接保存文档至服务器的功能,不过我手头上的一个改良版本的确是有此功能。

控件附带说明给出了保存文档至服务器的javascript函数,如:

function SaveToWeb()
{
    document.all.FramerControl1.HttpInit();
    document.all.FramerControl1.HttpAddPostCurrFile("FileData", "mydoc.doc");
    var err = document.all.FramerControl1.HttpPost("");
    if (!err)
        alert('保存失败!');
    else
        alert('保存成功!');
}

由此可见,关键问题是如何实现SaveDoc.aspx模块。于是乎在网上搜索相应的解决方案,但没有一个能在服务器上成功保存正确的文件。失望之余索性将原文档和上传文档用UltraEdit打开进行二进制级比较,然后抓包分析POST数据时http数据包的格式,最后终于找到了解决的办法,贴出来供遇到同样问题的朋友参考,代码如下:

BinaryReader bReader = new BinaryReader(Request.InputStream);
string strTemp = Encoding.GetEncoding("iso-8859-1").GetString(
bReader.ReadBytes((int)bReader.BaseStream.Length), 0, (int)bReader.BaseStream.Length);
string match = "Content-Type: application/msword\r\n\r\n";
int pos = strTemp.IndexOf(match) + match.Length;
bReader.BaseStream.Seek(pos, SeekOrigin.Begin);

string newFile = Server.MapPath(".") + "\\MyFile2.doc";
FileStream newDoc = new FileStream(newFile, FileMode.Create, FileAccess.Write);
BinaryWriter bWriter = new BinaryWriter(newDoc);
bWriter.BaseStream.Seek(0, SeekOrigin.End);


while (bReader.BaseStream.Position < bReader.BaseStream.Length - 38)
    bWriter.Write(bReader.ReadByte());

bReader.Close();
bWriter.Flush();
bWriter.Close();

    这里应该注意的是,从字节流中获取字符串时一定要采用iso-8859-1的编码方式,不要采用utf-8或其他,因为utf-8会将asci字符也扩展成相应的unicode双字节形式。原理很简单,代码面前了无秘密。

阅读(7388) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

zx853414402017-03-30 16:02:20

能发一份完整的源码吗?  zhanhulong@163.com     十分感谢

chinaunix网友2011-04-20 09:48:18

你是在webform上用还是winform上啊?能不能也发我一份啊,我的邮箱是wangxiaolei0416@gmail.com

chinaunix网友2010-05-21 20:01:34

谢谢 太牛了 成功了 你有QQ吗 我还有些不懂得想向您请教!

chinaunix网友2010-04-15 18:39:33

只能保存word2003,不能保存word2007

chinaunix网友2009-08-01 23:59:06

一直提示保存失败。。。