2009-09-03 11 views
21

Muszę utworzyć i zwrócić plik w mojej aplikacji ASP.net MVC aplikacji. Typ pliku powinien być normalnym plikiem .txt. Wiem, że mogę zwrócić FileResult, ale nie wiem jak z niego korzystać.Jak utworzyć plik i zwrócić go za pomocą FileResult w ASP.NET MVC?

public FilePathResult GetFile() 
{ 
string name = "me.txt"; 

FileInfo info = new FileInfo(name); 
if (!info.Exists) 
{ 
    using (StreamWriter writer = info.CreateText()) 
    { 
     writer.WriteLine("Hello, I am a new text file"); 

    } 
} 

return File(name, "text/plain"); 
} 

Ten kod nie działa. Czemu? Jak to zrobić z wynikiem strumienia?

Odpowiedz

31

EDIT (Jeśli chcesz strumień spróbuj tego:)

public FileStreamResult GetFile() 
{ 
    string name = "me.txt"; 

    FileInfo info = new FileInfo(name); 
    if (!info.Exists) 
    { 
     using (StreamWriter writer = info.CreateText()) 
     { 
      writer.WriteLine("Hello, I am a new text file"); 

     } 
    } 

    return File(info.OpenRead(), "text/plain"); 

} 

You może spróbować czegoś takiego ..

public FilePathResult GetFile() 
{ 
    string name = "me.txt"; 

    FileInfo info = new FileInfo(name); 
    if (!info.Exists) 
    { 
     using (StreamWriter writer = info.CreateText()) 
     { 
      writer.WriteLine("Hello, I am a new text file"); 

     } 
    } 

    return File(name, "text/plain"); 

} 
+3

Weź również pod uwagę inne opcje - http://stackoverflow.com/questions/1187261/whats-the-difference-between-the-four-file-results-in-asp-net-mvc pamiętając, że File (może pomieścić wszystkie one. – RichardOD

+0

to nie działa, więc usunąłem znak "nike" – Ante

+0

Tak, plik ([params], ...) zrobi to, co chcesz ... musisz dowiedzieć się, co chcesz ... – BigBlondeViking

8

Otwórz plik do StreamReader i przepuścić strumień jako argument do FileResult:

public ActionResult GetFile() 
{ 
    var stream = new StreamReader("thefilepath.txt"); 
    return File(stream.ReadToEnd(), "text/plain"); 
} 
+1

Zauważ, że '„thefilepath.txt”' musi być pełną ścieżką do pliku tekstowego, a nie tylko względnej ścieżki. –

+0

jak mogę je utworzyć? z "TextWriter tw = nowy StreamWriter (" date.txt ");" albo coś innego? – Ante

+1

Tak, na przykład tak. Pamiętaj, że ścieżki do plików muszą być pełne i używać instrukcji 'using'. –

1

Innym przykładem tworzenia i pobierając plik z aplikacji ASP .NET MVC na raz, ale zawartość pliku jest tworzony w pamięci (RAM) - w locie:

public ActionResult GetTextFile() 
{ 
    UTF8Encoding encoding = new UTF8Encoding(); 
    byte[] contentAsBytes = encoding.GetBytes("this is text content"); 

    this.HttpContext.Response.ContentType = "text/plain"; 
    this.HttpContext.Response.AddHeader("Content-Disposition", "filename=" + "text.txt"); 
    this.HttpContext.Response.Buffer = true; 
    this.HttpContext.Response.Clear(); 
    this.HttpContext.Response.OutputStream.Write(contentAsBytes, 0, contentAsBytes.Length); 
    this.HttpContext.Response.OutputStream.Flush(); 
    this.HttpContext.Response.End(); 

    return View(); 
} 
Powiązane problemy