public ActionResult UploadWord() { var files = Request.Form.Files; if (files.Count > 0 && files[0] != null) { var file = files[0]; string fileName = file.FileName; if (fileName != null && !Regex.IsMatch(Path.GetExtension(fileName), "doc|docx")) { return(ResultData(null, false, "文件格式不支持,只能上传doc或者docx的文档!")); } if (fileName != null) { string upload = _hostingEnvironment.WebRootPath + "/upload"; if (!Directory.Exists(upload)) { Directory.CreateDirectory(upload); } string resourceName = string.Empty.CreateShortToken(9); string ext = Path.GetExtension(fileName); string docPath = Path.Combine(upload, resourceName + ext); using (FileStream fs = new FileStream(docPath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { file.CopyTo(fs); } string htmlDir = docPath.Replace(".docx", "").Replace(".doc", ""); DocumentConvert.Doc2Html(docPath, htmlDir); string htmlfile = Path.Combine(htmlDir, "index.html"); string html = System.IO.File.ReadAllText(htmlfile).ReplaceHtmlImgSource("/upload/" + resourceName).ClearHtml().HtmlSantinizerStandard(); ThreadPool.QueueUserWorkItem(state => System.IO.File.Delete(htmlfile)); if (html.Length < 10) { Directory.Delete(htmlDir, true); System.IO.File.Delete(docPath); return(ResultData(null, false, "读取文件内容失败,请检查文件的完整性,建议另存后重新上传!")); } if (html.Length > 1000000) { Directory.Delete(htmlDir, true); System.IO.File.Delete(docPath); return(ResultData(null, false, "文档内容超长,服务器拒绝接收,请优化文档内容后再尝试重新上传!")); } return(ResultData(new { Title = Path.GetFileNameWithoutExtension(fileName), Content = html, ResourceName = resourceName + ext })); } } return(ResultData(null, false, "请先选择您需要上传的文件!")); }
public ActionResult UploadWord() { var files = Request.Files; if (files.Count > 0 && files[0] != null) { HttpPostedFileBase file = files[0]; string fileName = file.FileName; if (fileName != null && !Regex.IsMatch(Path.GetExtension(fileName), @"doc|docx")) { return(ResultData(null, false, "文件格式不支持,只能上传doc或者docx的文档!")); } if (fileName != null) { string upload = Request.MapPath("/upload"); if (!Directory.Exists(upload)) { Directory.CreateDirectory(upload); } string resourceName = string.Empty.CreateShortToken(9); string ext = Path.GetExtension(fileName); string docPath = Path.Combine(upload, resourceName + ext); file.SaveAs(docPath); string htmlDir = docPath.Replace(".docx", "").Replace(".doc", ""); DocumentConvert.Doc2Html(docPath, htmlDir); string htmlfile = Path.Combine(htmlDir, "index.html"); string html = System.IO.File.ReadAllText(htmlfile).ReplaceHtmlImgSource("/upload/" + resourceName).ClearHtml().HtmlSantinizerStandard(); MatchCollection matches = Regex.Matches(html, "<img.+?src=\"(.+?)\".+?>"); foreach (Match m in matches) { string src = m.Groups[1].Value; var(url, success) = CommonHelper.UploadImage(Server.MapPath(src)); if (success) { html = html.Replace(src, url); BackgroundJob.Enqueue(() => System.IO.File.Delete(Server.MapPath(src))); } } ThreadPool.QueueUserWorkItem(state => System.IO.File.Delete(htmlfile)); if (html.Length < 10) { Directory.Delete(htmlDir, true); System.IO.File.Delete(docPath); return(ResultData(null, false, "读取文件内容失败,请检查文件的完整性,建议另存后重新上传!")); } if (html.Length > 1000000) { Directory.Delete(htmlDir, true); System.IO.File.Delete(docPath); return(ResultData(null, false, "文档内容超长,服务器拒绝接收,请优化文档内容后再尝试重新上传!")); } return(ResultData(new { Title = Path.GetFileNameWithoutExtension(fileName), Content = html, ResourceName = resourceName + ext })); } } return(ResultData(null, false, "请先选择您需要上传的文件!")); }