公司最近需要一套文档管理系统,其实功能很简单,能上传、显示文档,根据权限能否下载、复制、查看
网上也有很多,试用了一下感觉功能都太花哨,都是着重协同办公功能
因为功能不多,所以自己写一个也不费劲,思路如下:
1.先解决文档上传、转换的功能
2.权限管理功能
文档上传转换,将上传的doc、xls、ppt文档转换成html格式,显示时通过js脚本禁止复制
昨天上传转换功能写完后,在本机测试正常,今天发布到服务器后是各种问题,在服务器打开网页都不行,解决到最后可服务器服务器运行了,到客户端上“转换”又报错
具体碰到的问题会在以后的文章中慢慢贴出来,但是今天最大的收获就是“360浏览器 不支持office操作”
文件上传成功后,在转换时出现“System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component. at Microsoft.Office.Interop.PowerPoint.PresentationClass.SaveAs(String FileName, PpSaveAsFileType FileFormat, MsoTriState EmbedTrueTypeFonts) at FileHtml.PPTToHtlm(FileUpload FileUpload1 错误,但是用ie,就可以上传并转换
这个问题很纠结,在本机编译成功运行,360浏览器可以转换,不报错,但是在本机一旦访问服务器,就报错,网上没有貌似很好的解决方案,我的解决方案就是,别用360~~~
附带doc、xls、ppt转换html代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using Microsoft.Office.Interop.Excel;
using System.Diagnostics;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office;
using System.Reflection;
///
/// FileHtml 的摘要说明
///
public class FileHtml
{
//public static string FileToHtml(string filePath)
public static string FileToHtml(FileUpload FileUpload1)
{
string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
string strss = "|doc|docx|";
string strss2 = "|xls|xlsx|";
string strss3 = "|ppt|pptx|";
if (strss.IndexOf("|" + fileExtension.Substring(1) + "|") > -1)
{
return wordToHtml(FileUpload1);
}
else if (strss2.IndexOf("|" + fileExtension.Substring(1) + "|") > -1)
{
return ExcelToHtml(FileUpload1);
}
else if (strss3.IndexOf("|" + fileExtension.Substring(1) + "|") > -1)
{
return PPTToHtlm(FileUpload1);
}
else
{ return ""; }
}
///
///
///
/// 上传后文件的路径
///
public static string wordToHtml(FileUpload FileUpload1)
{
try
{
Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();
Type wordType = word.GetType();
Microsoft.Office.Interop.Word.Documents docs = word.Documents;
Type docsType = docs.GetType();
FilesOperate fo = new FilesOperate();
//定义服务器doc存储地址
string wordPath = System.Web.HttpContext.Current.Server.MapPath(fo.GetOriginalFullName(System.IO.Path.GetExtension(FileUpload1.FileName).ToLower().Substring(1)));
//保存至服务器
FileUpload1.SaveAs(wordPath);
object fileName1 = wordPath;
Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { fileName1, true, true });
// 转换格式,另存为html
Type docType = doc.GetType();
string filename = fo.GetNewFileName() + ".html";
string fpath = fo.GetConvertDirectory();
string path = (System.Web.HttpContext.Current.Server.MapPath(fpath));
Directory.CreateDirectory(path);
//被转换的html文档保存的位置
object saveFileName = path + filename;
docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML });
// 退出 Word
wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
//返回文件名
return (fpath + filename);
}
catch (Exception ex)
{
return ex.ToString();
}
}
///
///
///
/// 上传后文件的路径
///
public static string PPTToHtlm(FileUpload FileUpload1)
{
try
{
FilesOperate fo = new FilesOperate();
//定义服务器doc存储地址
string wordPath = System.Web.HttpContext.Current.Server.MapPath(fo.GetOriginalFullName(System.IO.Path.GetExtension(FileUpload1.FileName).ToLower().Substring(1)));
//保存至服务器
FileUpload1.SaveAs(wordPath);
Microsoft.Office.Interop.PowerPoint.Application ppApp = new Microsoft.Office.Interop.PowerPoint.Application();
string filename = fo.GetNewFileName() + ".html";
string fpath = fo.GetConvertDirectory();
string path = (System.Web.HttpContext.Current.Server.MapPath(fpath));
Directory.CreateDirectory(path);
string saveFileName = path + filename;
Microsoft.Office.Interop.PowerPoint.Presentation prsPres = ppApp.Presentations.Open(wordPath, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
//被转换的html文档保存的位置
prsPres.SaveAs(saveFileName, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsHTML, Microsoft.Office.Core.MsoTriState.msoTrue);
prsPres.Close();
ppApp.Quit();
return (fpath + filename);
}
catch (Exception ex)
{
return ex.ToString();
}
}
///
///
///
/// 上传后文件的路径
///
public static string ExcelToHtml(FileUpload FileUpload1)
{
try
{
FilesOperate fo = new FilesOperate();
//定义服务器doc存储地址
string wordPath = System.Web.HttpContext.Current.Server.MapPath(fo.GetOriginalFullName(System.IO.Path.GetExtension(FileUpload1.FileName).ToLower().Substring(1)));
//保存至服务器
FileUpload1.SaveAs(wordPath);
string filename = fo.GetNewFileName() + ".html";
string fpath = fo.GetConvertDirectory();
string path = (System.Web.HttpContext.Current.Server.MapPath(fpath));
Directory.CreateDirectory(path);
Directory.CreateDirectory(path);
//被转换的html文档保存的位置
object saveFileName = path + filename.Replace(":", "-");
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = false;
object o = System.Reflection.Missing.Value;
_Workbook xls = app.Workbooks.Open(wordPath, o, true, o, o, o, o, o, o, o, o, o, o, o, o);
object fileName = saveFileName;
object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;//Html
xls.SaveAs(fileName, format, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o, o);
app.Quit();
return fpath + filename.Replace(":", "-");
}
catch (Exception ex)
{
return ex.ToString();
}
}
}
还有一个类是获取文件名及路径的,那个很简单,自己搞搞就出来