2012-03-07 5 views
6

그래서 이런 작업에서 FileContentResult을 반환하고있어 (난ASP.NET MVC와 Internet Explorer에서 "파일을 다운로드 할 수 없습니다"

return File(pck.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "MyExcelFile.xlsx"); 

것은 IE에서 "열기"를 클릭 IE9, 버전 9.0.8112.16421 사용), "파일을 다운로드 할 수 없습니다"라고 표시되며 사용자에게 '다시 시도'버튼이 표시됩니다. 그들이 재시도를 클릭하면 제대로 작동합니다. 저장을 클릭하면 정상적으로 작동합니다. Firefox에서는 잘 작동합니다.

처음으로 열기를 클릭하면 어떻게 파일을 열 수 있습니까?

+0

어떤 버전? – Joe

+0

질문을 업데이트했습니다. –

+0

첫 번째 요청을 할 때 fiddler를 설치하고 실행하십시오. 서버에서 되돌아 오는 응답을 검사 할 수 있습니다. 어쩌면 그 문제에 대해 밝혀 줄 것입니다. http://www.fiddler2.com/fiddler2/ – Joe

답변

2

IE를 수정하여 IE가 올바른 작업을 수행 할 수있었습니다. 그것은 일종의 해커지만, 여기에 세부 사항이 있습니다. HTH.

좋은 MVC 코더로서 Url.Action()을 사용하여 내 컨트롤러 동작에 대한 내보기에서 올바른 링크를 생성했습니다. 결과는 "/ Subscription/DownloadArchive"이었고, 나는 같은 문제가있었습니다. (나는 ZIP 파일을 스트리밍하고 있지만 CSV와 다를 바는 없다.) 방금 게시물을 읽은 후 URL을 "/Subscription/DownloadArchive/Archive.zip"에 하드 코딩했다. 코드에서 "Archive.zip"을 무시하지만, 사실 그것은 컨트롤러의 동작에서 반환하는 파일 이름입니다.

Presto!

0

동일한 문제가 있었지만 Visual Studio Development Server의 포트 번호를 다른 것으로 변경하면이 문제가 사라졌습니다.

2

나는 동일한 문제가있어서 좋은 해결책을 제시 할 수 없다. (Tood가 제안한 것 외에는 이다.) 그러나 fiddler & co.와 함께 상황을 살펴보면 도움이 될만한 정보가 더 있습니다.

우리의 응용 프로그램은 즉시 PDF 문서를 작성하여 다운로드로 제공합니다. 이 문제는 분명히 데이터에 의존적인데, 일부 생성 된 파일은 첫 번째 시도에서는 잘 다운로드되지만 다른 하나는 재 시도가 재현성이 필요함을 의미합니다.

Fiddler는 내가 알 수있는 한 각 액세스에서 동일한 서버 응답을 보여줍니다. 요청은 그러나, (샘플이 약간 편집) 다릅니다

먼저 요청 :

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Referer: ... 
Accept-Language: ... 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept-Encoding: gzip, deflate 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

두 번째 요청 : 두 번째 요청이 '동의'으로 감소

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: */* 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

주, 헤더를 단지 */*. 필자가 URL에 파일 확장자를 추가하는 것을 꺼려하는 이유는 제안 된 다운로드 이름이 응답과 함께 제출 된 항목 데이터에서 생성되고 그렇지 않으면 ID와 완전히 관련이 없기 때문입니다.

+0

허, 매우 흥미 롭습니다. 나는 이것에 돌아와서 다시보아야 할 것이다. –

+0

IE 11에서 같은 문제가 발생했습니다. Fiddler에서도 같은 결과가 나타납니다. 내 프로세스는 로컬 시스템에서 텍스트 파일을 열고 편집하거나 처음부터 새로 작성하는 것이 었습니다. 가장 좋은 해결 방법은'filename.timestamp.txt'와 같은 파일 이름에 타임 스탬프를 추가하는 것입니다. – JabberwockyDecompiler

0

이 작품 .. 즉의

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Server.ScriptTimeout = 3000; 
Response.AppendHeader("Content-Disposition:", "attachment; filename=" + fileName); 
Response.ContentType = "application/x-msdownload"; 
excelFile.SaveXls(Response.OutputStream); 
Response.Flush(); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
// Response.Close(); 
Response.End(); 
관련 문제