首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StreamReader为空

StreamReader为空
EN

Stack Overflow用户
提问于 2016-04-09 15:07:10
回答 2查看 4.1K关注 0票数 0

我使用一个表单来发布一个文件,并使用一个选项字段给控件。我将HttpPostedFileBase文件传递给3种方法。在其中两种情况下,它不是空的,但在最后一种中,它是空的。我不会在任何地方给它赋值。这是密码..。

我的表格

代码语言:javascript
复制
<form onsubmit="return check();" action="" method="post" enctype="multipart/form-data" class="form-inline">
    <div class="form-group">
        <label for="languages">Choose the language combination for translating the E BOOK </label>
        <select class=" input-large" name="languages" id="languages">

            <option value="en-fr">ENGLISH TO FRENCH</option>
            <option value="en-de">ENGLISH TO GERMAN</option>
            <option value="en-pt">ENGLISH TO PORTUGUESE</option>
            <option value="en-ru">ENGLISH TO RUSSIAN</option>
            <option value="en-sr">ENGLISH TO SERBIAN</option>
            <option value="en-es">ENGLISH TO SPANISH</option>
            <option value="fr-en">FRENCH TO ENGLISH</option>
            <option value="de-en">GERMAN TO ENGLISH</option>
            <option value="de-sr">GERMAN TO SERBIAN</option>
            <option value="pt-en">PORTUGUESE TO ENGLISH</option>
            <option value="ru-en">RUSSIAN TO ENGLISH</option>
            <option value="es-en">SPANISH TO ENGLISH</option>
        </select>
    </div>


    <div class="form-inline">
        <input type="file" class="btn btn-success" name="file" id="file" accept="text/plain, application/pdf">
        <input type="submit" class="btn btn-success" value="Upload PDF/TXT document" name="submit">
    </div>
</form>

这是控制器中处理表单的部分。

这是我的整个控制课

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Web;
using System.Web.Mvc;
using System.Data;

namespace TranslationEmbedder.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Index(HttpPostedFileBase file, string languages)
        {

            if (file != null)
            {
                if (file.ContentLength > 0)
                {
                    //var fileName = Path.GetFileName(file.FileName);
                    var fileNameNoExtension = Path.GetFileNameWithoutExtension(file.FileName);
                    //var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
                    //file.SaveAs(path);
                    HashSet<string> set=null;
                    var fileExtension = Path.GetExtension(file.FileName);

                    if (fileExtension.ToLower().Equals(".txt"))
                    {
                        set = HomeController.geUniqueWordsInEbook(file);
                    }

                    if (fileExtension.ToLower().Equals(".pdf"))
                    {
                        set = HomeController.geUniqueWordsInEbookPdf(file);
                    }

                    if (set == null)
                    {
                        return RedirectToAction("Index");
                    }

                    Dictionary<string, string> dic = HomeController.LoadCsvDictionary(set, languages);

                    if (fileExtension.ToLower().Equals(".txt"))
                    {
                        Response.Clear();
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameNoExtension + ".html");
                        Response.ContentType = "text/html";
                        HomeController.writeHtmlEbookFromTxt(file, dic, languages);
                        Response.End();
                    }

                    if (fileExtension.ToLower().Equals(".pdf"))
                    {
                        Response.Clear();
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameNoExtension + ".html");
                        Response.ContentType = "text/html";
                        writeHtmlEbookFromPdf(file, dic, languages);
                        Response.End();
                    }


                    // Not sure what else to do here
                    return Content(String.Empty);



                }
            }

            return RedirectToAction("Index");
        }

        private void writeHtmlEbookFromPdf(HttpPostedFileBase file, Dictionary<string, string> dic,string languageCode)
        {


        }

        private static  void writeHtmlEbookFromTxt(HttpPostedFileBase file, Dictionary<string, string> dic, string languageCode)
        {


                var fileNameNoExtension = Path.GetFileNameWithoutExtension(file.FileName);

                    System.Web.HttpContext.Current.Response.Write("");
                    System.Web.HttpContext.Current.Response.Write("<!DOCTYPE html><html>");
                    System.Web.HttpContext.Current.Response.Write("<head><META HTTP-EQUIV='content-type' CONTENT='text/html; charset=utf-8'><title>" + fileNameNoExtension + "</title>");
                    System.Web.HttpContext.Current.Response.Write("<script>");
                    System.Web.HttpContext.Current.Response.Write("function speakIt(b)");
                    System.Web.HttpContext.Current.Response.Write("{");
                    System.Web.HttpContext.Current.Response.Write("if (document.getElementById(\"myCheck\").checked) {");
                    System.Web.HttpContext.Current.Response.Write("if ('speechSynthesis' in window) {");
                    System.Web.HttpContext.Current.Response.Write("var sometext=b;");
                    System.Web.HttpContext.Current.Response.Write("var msg = new SpeechSynthesisUtterance();");
                    System.Web.HttpContext.Current.Response.Write("var voices = window.speechSynthesis.getVoices();");
                    System.Web.HttpContext.Current.Response.Write("msg.text = sometext;");


                    string[] toSpeak = languageCode.Split('-');

                    switch (toSpeak[0])
                    {
                        case "de"://German
                            languageCode = "de-DE";
                            break;
                        case "en"://English
                            languageCode = "en-GB";
                            break;
                        case "es"://Spanish
                            languageCode = "es-ES";
                            break;
                        case "fr"://French
                            languageCode = "fr-FR";
                            break;
                        case "ru"://Russian
                            languageCode = "ru";
                            break;
                        case "pt"://Portuguese - Portugal
                            languageCode = "pt-PT";
                            break;
                        case "sr"://Serbian
                            languageCode = "sr-SP";
                            break;
                        case "ja"://Japanese
                            languageCode = "ja";
                            break;
                        case "he"://Hebrew
                            languageCode = "he";
                            break;
                        case "it"://Italian - Italy
                            languageCode = "it-IT";
                            break;
                        case "el"://Greek
                            languageCode = "el";
                            break;
                        case "zh"://Chinese - China
                            languageCode = "zh-CN";
                            break;
                        case "ar"://Arabic - Egypt
                            languageCode = "ar-EG";
                            break;
                        case "hy"://Armenian
                            languageCode = "hy";
                            break;
                        case "eu"://Basque
                            languageCode = "eu";
                            break;
                        case "be"://Belarusian
                            languageCode = "be";
                            break;
                        case "cs"://Czech
                            languageCode = "cs";
                            break;
                        case "da"://Danish
                            languageCode = "da";
                            break;
                        case "et"://Estonian
                            languageCode = "et";
                            break;
                        case "mk"://FYRO Macedonia
                            languageCode = "mk";
                            break;
                        case "hu"://Hungarian
                            languageCode = "hu";
                            break;
                        case "is"://Icelandic
                            languageCode = "is";
                            break;
                        case "hi"://Hindi
                            languageCode = "hi";
                            break;
                        case "id"://Indonesian
                            languageCode = "id";
                            break;
                        case "kk"://Kazakh
                            languageCode = "kk";
                            break;
                        case "ko"://Korean
                            languageCode = "ko";
                            break;
                        case "lv"://Latvian
                            languageCode = "lv";
                            break;
                        case "lt"://Lithuanian
                            languageCode = "lt";
                            break;
                        case "pl"://Polish
                            languageCode = "pl";
                            break;
                        case "sk"://Slovak
                            languageCode = "sk";
                            break;
                        case "sl"://Slovenian
                            languageCode = "sl";
                            break;
                        case "sv"://Swedish - Sweden
                            languageCode = "sv-SE";
                            break;
                        case "tr"://Turkish
                            languageCode = "tr";
                            break;
                        case "uk"://Ukrainian
                            languageCode = "uk";
                            break;
                        case "vi"://Vietnamese
                            languageCode = "vi";
                            break;
                        //...add more language support
                        default:
                            languageCode = "de-DE";
                            break;
                    }

                    System.Web.HttpContext.Current.Response.Write("msg.lang = '" + languageCode + "';");
                    System.Web.HttpContext.Current.Response.Write("speechSynthesis.speak(msg);");
                    System.Web.HttpContext.Current.Response.Write("}");
                    System.Web.HttpContext.Current.Response.Write("}");
                    System.Web.HttpContext.Current.Response.Write("}");

                    System.Web.HttpContext.Current.Response.Write("</script>");

                    System.Web.HttpContext.Current.Response.Write("<style>");

                    System.Web.HttpContext.Current.Response.Write("#ebook {");
                    System.Web.HttpContext.Current.Response.Write(" margin: auto;");
                    System.Web.HttpContext.Current.Response.Write("width: 90%;font-size: 200%;@page {counter-increment: page;counter-reset: page 1;@top-right {content: \"Page \" counter(page) \" of \" counter(pages);}}");
                    System.Web.HttpContext.Current.Response.Write("text-align: left;line-height:1.5;font-family: 'Merriweather', Georgia, 'Times New Roman', Times, serif;");
                    System.Web.HttpContext.Current.Response.Write("vertical-align: middle;");
                    System.Web.HttpContext.Current.Response.Write("word-wrap: break-word;");
                    System.Web.HttpContext.Current.Response.Write("border:3px solid #8AC007;");
                    System.Web.HttpContext.Current.Response.Write("padding: 10px;");
                    System.Web.HttpContext.Current.Response.Write("}");

                    System.Web.HttpContext.Current.Response.Write("#header-wrap {");
                    System.Web.HttpContext.Current.Response.Write("position: fixed;");
                    System.Web.HttpContext.Current.Response.Write("text-align: center;");
                    System.Web.HttpContext.Current.Response.Write("background-color: #8AC007;");
                    System.Web.HttpContext.Current.Response.Write("color: white;");
                    System.Web.HttpContext.Current.Response.Write("height: 25px;");
                    System.Web.HttpContext.Current.Response.Write("top: 0;");
                    System.Web.HttpContext.Current.Response.Write("width: 100%;");
                    System.Web.HttpContext.Current.Response.Write("z-index: 100;");
                    System.Web.HttpContext.Current.Response.Write("}");

                    System.Web.HttpContext.Current.Response.Write("</style>");
                    System.Web.HttpContext.Current.Response.Write("</head><body></br>");

                    System.Web.HttpContext.Current.Response.Write("<div id='header-wrap'></br>");
                    System.Web.HttpContext.Current.Response.Write("<span>ENABLE / DISABLE TEXT TO SPEECH : <input type=\"checkbox\" name=\"myCheck\" id=\"myCheck\" checked=\"checked\"></span></br></br>");
                    System.Web.HttpContext.Current.Response.Write("</div>");

                    System.Web.HttpContext.Current.Response.Write("<div id='ebook'>");




            System.IO.StreamReader reader = new System.IO.StreamReader(file.InputStream);
            string line="";
            while ((line = reader.ReadLine()) != null)
                {


                        string[] words = line.Split(' ');

                        foreach (string word in words)
                        {
                            string cleanWord = word.Replace(".", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace("ß", "ss").Replace("?", "").Replace("!", "").Replace("«", "").Replace("»", "").Replace("[", " ").Replace("]", " ").Replace("(", " ").Replace(")", " ").Replace(",,", " ").Replace("\"", " ").Replace("-", " ").ToLower();
                            string value = "";
                            if (dic.ContainsKey(cleanWord))
                                value = dic[cleanWord];

                            System.Web.HttpContext.Current.Response.Write("<span  onclick =\"alert('" + value + "');speakIt('" + cleanWord + "'); \" >" + " " + word + " " + "</span>");
                        }

                        System.Web.HttpContext.Current.Response.Write("</br>");


                    }
                    System.Web.HttpContext.Current.Response.Write("</div></body></html>");


                reader.Close();




        }
        private static Dictionary<string, string> LoadCsvDictionary(HashSet<string> uniqueEbookWords,string language)
        {

            string languageFile = AppDomain.CurrentDomain.GetData("DataDirectory")+ "\\languages\\"+ language + ".csv";
            Dictionary<string, string> d = new Dictionary<string, string>();



            using (var reader = new StreamReader(System.IO.File.OpenRead(@languageFile)) )
            {

                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    var values = line.Split(',');

                    if (uniqueEbookWords.Contains(values[0].ToLower()))
                    {
                        if (!d.ContainsKey(values[0].ToLower()))
                            d.Add(values[0].ToLower(), values[1].ToLower());
                    }

                }


            }


            return d;
        }

        private static HashSet<string> geUniqueWordsInEbook(HttpPostedFileBase file)
        {
            //make two options one for PDF and one for TXT uploaded ebook...
            int counter = 0;
            string line;

            HashSet<string> uniqueWords = new HashSet<string>();

            System.IO.StreamReader file1 =new System.IO.StreamReader(file.InputStream);


            while ((line = file1.ReadLine()) != null)
            {
                string[] words = line.Split(' ');
                foreach (string word in words)
                {
                    string cleanWord = word.Replace(".", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace("ß", "ss").Replace("?", "").Replace("!", "").Replace("«", "").Replace("»", "").Replace("[", " ").Replace("]", " ").Replace("(", " ").Replace(")", " ").Replace(",,", " ").Replace("\"", " ").Replace("-", " ").ToLower();
                    uniqueWords.Add(cleanWord);

                }

                counter++;
            }

            file1.Close();


            return uniqueWords;
        }

        private static HashSet<string> geUniqueWordsInEbookPdf(HttpPostedFileBase file)
        {
            //make two options one for PDF and one for TXT uploaded ebook...
            int counter = 0;
            string line;

            HashSet<string> uniqueWords = new HashSet<string>();

            System.IO.StreamReader file1 = new System.IO.StreamReader(file.InputStream);


            while ((line = file1.ReadLine()) != null)
            {
                string[] words = line.Split(' ');
                foreach (string word in words)
                {
                    string cleanWord = word.Replace(".", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace("ß", "ss").Replace("?", "").Replace("!", "").Replace("«", "").Replace("»", "").Replace("[", " ").Replace("]", " ").Replace("(", " ").Replace(")", " ").Replace(",,", " ").Replace("\"", " ").Replace("-", " ").ToLower();
                    uniqueWords.Add(cleanWord);

                }

                counter++;
            }

            file1.Close();


            return uniqueWords;
        }



        public ActionResult About()
        {
            ViewBag.Message = "Watch a video that will you more about www.TRANSLATION-EMBEDDER.com project.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Feel free to contact us";

            return View();
        }

        [HttpPost]
        public ActionResult Contact(string email,string message)
        {

            if (email.Equals(""))
            {
                ViewBag.Message = "You must provide an email";
                return View();
            }

            if (message.Equals(""))
            {
                ViewBag.Message = "You must provide the message";
                return View();
            }

            ViewBag.Message = "The message is sent to us from the user with email: "+ email + ".We will responde as soon as possible. Have a nice day. ";
            sendEmail(email, message);
            return View();
        }

        private void sendEmail(string email, string message)
        {
            //http://stackoverflow.com/questions/18326738/how-to-send-email-in-asp-net-c-sharp

            /*
            SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 25);

            smtpClient.Credentials = new System.Net.NetworkCredential("jvkrneta@gmail.com", "tijanica");
            smtpClient.UseDefaultCredentials = true;
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpClient.EnableSsl = true;
            MailMessage mail = new MailMessage();

            //Setting From , To and CC
            mail.From = new MailAddress(email, "Translation-Embedder.com");
            mail.To.Add(new MailAddress("jvkrneta@gmail.com"));
            mail.Body = message;

            smtpClient.Send(mail);
            */
        }





    }
}   

而且只在方法上

代码语言:javascript
复制
private static  void writeHtmlEbookFromTxt(HttpPostedFileBase file, Dictionary<string, string> dic, string languageCode)

对于读取器,我是否获得null,而循环文件的循环是否从未运行此部分:

代码语言:javascript
复制
 System.IO.StreamReader reader = new System.IO.StreamReader(file.InputStream);
            string line="";
            while ((line = reader.ReadLine()) != null)
                {


                        string[] words = line.Split(' ');

                        foreach (string word in words)
                        {
                            string cleanWord = word.Replace(".", "").Replace(",", "").Replace(":", "").Replace(";", "").Replace("ß", "ss").Replace("?", "").Replace("!", "").Replace("«", "").Replace("»", "").Replace("[", " ").Replace("]", " ").Replace("(", " ").Replace(")", " ").Replace(",,", " ").Replace("\"", " ").Replace("-", " ").ToLower();
                            string value = "";
                            if (dic.ContainsKey(cleanWord))
                                value = dic[cleanWord];

                            System.Web.HttpContext.Current.Response.Write("<span  onclick =\"alert('" + value + "');speakIt('" + cleanWord + "'); \" >" + " " + word + " " + "</span>");
                        }

                        System.Web.HttpContext.Current.Response.Write("</br>");


                    }
                    System.Web.HttpContext.Current.Response.Write("</div></body></html>");


                reader.Close();

我尝试了所有这些方法,但是没有看到为什么我在许多方法中使用的相同代码只在本例中为reader对象提供null。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-09 15:23:52

您不能读取文件流两次。在您的geUniqueWordsInEbook方法中,您已经读取了file.InputStream,甚至在结束时关闭了它。这就是为什么不能在writeHtmlEbookFromTxt方法中第二次阅读它的原因。在读取文件内容时,需要在一次传递中执行这2项操作。因此,基本上,您必须重新组织您的代码,以便在读取文件流时,这两个操作在一个地方进行。

如果您不期望上传的文件非常大,您可以将它们的内容加载到内存中(在byte[]中),您可以通过方法传递这些内容。但对于大型文件来说,这将是一个过度的打击。

另一种选择是将上传的文件保存到您的then服务器上的磁盘上,然后从这个上传的文件中读取多次。

票数 3
EN

Stack Overflow用户

发布于 2016-04-09 15:46:46

我希望这对你会有帮助。

控制者:

代码语言:javascript
复制
[HttpPost]
    public ActionResult Create(HttpPostedFileBase FileData)
    {
        string fpath = "";
        try
        {
            if (Request.Files.Count > 0)
            {
                try
                {

                    HttpPostedFileBase file = FileData;
                    string fname;
                    // want to check extension then use this method
                    //if (CheckExtension(file.ContentType.ToLower()))
                    //{
                        // Checking for Internet Explorer  
                        string extension = System.IO.Path.GetExtension(file.FileName);

                        if (Request.Browser.Browser.ToUpper() == "IE" || Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER")
                        {
                            string[] testfiles = file.FileName.Split(new char[] { '\\' });
                            fname = Guid.NewGuid() + extension; //+ testfiles[testfiles.Length - 1];
                        }
                        else
                        {
                            fname = Guid.NewGuid() + extension; //+ file.FileName;
                        }

                        // Get the complete folder path and store the file inside it.  
                        fname = System.IO.Path.Combine(Server.MapPath("~/Content/"), fname);
                        file.SaveAs(fname);

                        return Content("Successfully Uploaded");
                    //}

                }
                catch (Exception ex)
                {
                    return Content("Error occurred. Error details: " + ex.Message);
                }
            }

        }
        catch (Exception)
        {
            return Content(Response.StatusCode.ToString() + " Bad Requrest error." + fpath);
        }
        return Content("No files selected.");
    }

    public bool CheckExtension(string Ext)
    {
        if (Ext == "application/pdf")
        {
            return true;
        }
        else if (Ext == "text/plain")
        {
            return true;
        }
        else if (Ext == "application/msword")
        {
            return true;
        }
        else if (Ext == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
        {
            return true;
        }
        else
        {
            return false;
        }
    }

查看:

代码语言:javascript
复制
@using (Html.BeginForm("Create", "Home", null, FormMethod.Post, new { id = "formU", enctype = "multipart/form-data" })){

<div class="modal-body">
    <div class="form-horizontal">
        @Html.ValidationSummary(true)

        <label for="file">Filename:</label>
        <input type="file" name="File" id="File" style="width:240px" />

        <div class="form-group">
            <input id="submit" type="submit" value="Submit" class="btn btn-success" />
        </div>
    </div>
</div>}

还可以从git集线器存储库单击此处下载源代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36518595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档