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, "请先选择您需要上传的文件!"));
        }
Beispiel #2
0
        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, "请先选择您需要上传的文件!"));
        }