2014-11-11 3 views
0

빈 파일을 다운로드하는 ASP.Net MVC 4 응용 프로그램이 있습니다. 내가 뭘 놓치고 있니?빈 파일 쓰기 FileStream 작업

컨트롤러 :

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public FileStreamResult ICS() 
    { 
     var memoryStream = new MemoryStream(); 
     StreamWriter sw = new StreamWriter(memoryStream); 
     sw.WriteLine(@"BEGIN:VCALENDAR"); 
     sw.WriteLine(@"VERSION:2.0"); 
     sw.WriteLine(@"PRODID:-//www.marudot.com//iCal Event Maker"); 
     sw.WriteLine(@"BEGIN:VEVENT"); 
     sw.WriteLine(@"DTSTAMP:20141111T165545Z"); 
     sw.WriteLine(@"UID:[email protected]"); 
     sw.WriteLine(@"DTSTART;TZID=""America/Chicago"":20141114T080000"); 
     sw.WriteLine(@"DTEND;TZID=""America/Chicago"":20141114T120000"); 
     sw.WriteLine(@"SUMMARY:Bobby's Big Bash"); 
     sw.WriteLine(@"DESCRIPTION:test"); 
     sw.WriteLine(@"LOCATION:test"); 
     sw.WriteLine(@"END:VEVENT"); 
     sw.WriteLine(@"END:VCALENDAR"); 

     sw.Flush(); 
     return new FileStreamResult(memoryStream, "text/calendar") { FileDownloadName = "test.ics" }; 
    } 

} 

보기 :

<h2>Index</h2> 
@Html.ActionLink("ical event", "ICS"); 

링크를 클릭하면 빈 ICS 파일을 다운로드합니다.

답변

3

flush 후 MemoryStream 객체의 Position 속성을 0으로 설정하십시오.

1

그냥 추측하십시오. 파일을 다운로드하기 전에 MemoryStream이 범위를 벗어납니다. 아마도 실제 파일에 내용을 쓰고 그 파일을 다시 읽을 때 어떤 일이 일어나는 지 알 수 있습니다. Path.GetTempFileName();은 임시 파일을 작성하는 데 유용 할 수 있습니다.