如何实现WORD文档自动导入网站数据库
最近,本人在制作个人网站时发现,如何把手中的WORD文档快速的上传到自己的网站是个大问题。主要的拦路虎就是文档中嵌入的图片如何上传,秉承网人传统“不懂问百度”的精神,我在百度上搜了好久,发现这真的是一个好问题,现成的解决方法还是有的:
首先有个的编辑器在很久之前就解决了这个问题,它是eWebEditor,它的解决方案是在你的机器上安装一个浏览器插件,我试用了一下格式保留不错,图片正确上传。但很不幸它要收费,对于我辈屌丝来说,收费的东东用不起啊。而且在百度搜了下,听人说eWebEditor还存在很大的安全问题,所以自然就pass了。
还有一个是百度投资在搞的ueditor,可惜里面的导入功能现在还在测试,无法提供给我们使用,而且经过我的测试,它的导入功能无法导入.doc文档,只能支持.docx文档,当然它的导入功能还是很好使的,只不过受制于人不是我们的追求。所以我决定自己搞一个东西实现这个功能。
如何实现呢,解决方案有2个选择:客户端方案和服务端方案,由于我的个人网站时PHP语言,处理WORD文档的能力比较弱,经过我的搜索好像只有phpword提供这样的功能,但要处理这么麻烦的工作,它的能力还力有未逮。那么就用客户端方案了,想到WORD的老东家是微软,所以我选择了C#作为开发语言,事实证明C#开发的确给我省了很多时间。下面我就开发过程说几点感想:
1、 首先选择开发方案,我选择了一个最简单的开发方案:打开WORD文档并把文档复制到剪贴板,C#程序读取剪贴板内容并把图文上传到网站。这样的方案省却了操作
WORD文件,降低了编程难度。
2、 解决核心问题,这个方案的核心问题是:读取剪贴板上的HTML代码,上传HTML代码中的图片,替换HTML代码中的图片链接。经过百度搜索发现,C#要实现这些功能都非常简单,核心代码如下:
剪贴板读取HTML:Clipboard.GetData(\"Html Format\");
上传图片:myWebClient.UploadFile(“上传地址”, \"POST\", “上传文件名”)
替换字符:str = str.Replace(strlist[i], webfilelist[i]);
3、确定了核心问题的解决方法,接下来就是代码的编写。代码如下:if (Clipboard.ContainsText(TextDataFormat.Html))
{
System.IO.MemoryStream vMemoryStream =
Clipboard.GetData(\"Html Format\") as System.IO.MemoryStream;
vMemoryStream.Position = 0;
byte[] vBytes = new byte[vMemoryStream.Length];
vMemoryStream.Read(vBytes, 0, (int)vMemoryStream.Length);
string str = Encoding.UTF8.GetString(vBytes);
int ipos = str.IndexOf(\"
str = str.Substring(ipos + 5);ipos = str.IndexOf(\">\");
str = str.Substring(ipos + 1);
ipos = str.IndexOf(\"str = str.Substring(0, ipos);
int jpos = -1;
ipos = str.IndexOf(\"src=\\\"\");
this.listBox1.Items.Clear();
List while (ipos != -1) { jpos = str.IndexOf(\"\\\"\", ipos + 5); strlist.Add(str.Substring(ipos + 5, jpos - ipos - 5)); ipos = str.IndexOf(\"src=\\\"\", ipos + 5); } //开始上传图片 List WebClient myWebClient = new WebClient(); for (int i = 0; i < strlist.Count; i++) { string s = strlist[i]; s = s.Replace(\"file:///\", \"\"); string fname = Encoding.UTF8.GetString(myWebClient.UploadFile(this.textBox1.Text, \"POST\", s)); webfilelist.Add(fname); this.listBox1.Items.Add(fname); } //替换文章中的图片链接 for (int i = 0; i < strlist.Count; i++) { str = str.Replace(strlist[i], webfilelist[i]); } str = str.Replace(\"'\", \"\"); //复制到剪贴板 this.richTextBox1.Text = str; Clipboard.SetText(str); } else { MessageBox.Show(\"剪贴板中没有发现HTML资源。\"); } } 4、注意:这个导入程序的使用必须要网站配合接收图片文件,否则无法运行。另外,在工作过程中我发现,WORD复制到剪贴板时会提供双份的图片,WPS则提供单份的图片而且是PNG格式的。所以我一般使用WPS来复制到剪贴板。当然最主要的还是我的程序没有优化导致的。 现在,这个程序在我的电脑上运行良好,只用于我的网站导入WORD文档之用。对于绝大多数人而言,这个程序无法为他工作,因为想要使用它,您还得懂点儿编程。想要索取程序的人请与米斯唐联系:QQ147885198,期待您对于程序的改进。 程序截图如下: 最后,程序可以改进的地方实在是太多了,它只是一个实验程序。最近,我在想是否可以用Javascript来实现呢?越想越觉得可行,因为最新版的浏览器都支持FileReader接口,那么我们就可以利用这个接口读取图片,并把它编码上传到服务器,不就和刚才的程序一样了吗?真是一个天才的想法,等有时间时我来完成它。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务