公司最近需要一套文檔管理系統,其實功能很簡單,能上傳、顯示文檔,根據權限能否下載、複製、查看
網上也有很多,試用了一下感覺功能都太花哨,都是着重協同辦公功能
因爲功能不多,所以自己寫一個也不費勁,思路如下:
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;
/// <summary>
/// FileHtml 的摘要說明
/// </summary>
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 ""; }
}
/// <summary>
///
/// </summary>
/// <param name="filePath">上傳後文件的路徑</param>
/// <returns></returns>
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();
}
}
/// <summary>
///
/// </summary>
/// <param name="filePath">上傳後文件的路徑</param>
/// <returns></returns>
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();
}
}
/// <summary>
///
/// </summary>
/// <param name="filePath">上傳後文件的路徑</param>
/// <returns></returns>
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();
}
}
}