2016-07-01 14 views
-1

私のウェブサイトにファイルをダウンロードしたい。.Net MVCでファイルをダウンロード

マイコード:

var uploadPath = HttpContext.Current.Server.MapPath("~/Content/upload/products/"); 
var response = new HttpResponseMessage(); 

var stream =new FileStream(uploadPath + "\\" + fileName, FileMode.Open, FileAccess.Read); 
response.Headers.AcceptRanges.Add("bytes"); 
response.StatusCode = HttpStatusCode.OK; 
response.Content = new StreamContent(stream); 
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
{ 
    FileName = Path.GetFileName(uploadPath + "\\" + fileName) 
}; 
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
return response; 

しかし、私は、ブラウザ上のファイルのダウンロードの進行状況を確認することはできません。私を助けてください!

+1

「それは働いていません」と言っても、原因と考えられる解決方法を提供するにはあまり意味がありません。何らかのエラーが出ていますか?あなたは応答メッセージ(\ w Fiddlerのようなもの)を調べましたか? [mcve] – Nkosi

答えて

0

応答が返される前にファイルストリームが閉じられている場合は、メモリストリームにコピーして使用することができます。

var uploadPath = HttpContext.Current.Server.MapPath("~/Content/upload/products/"); 

var stream = new FileStream(uploadPath + "\\" + fileName, FileMode.Open, FileAccess.Read); 
var memoryStream = new MemoryStream(); 
stream.CopyTo(memoryStream); 
//content length for header 
var contentLength = memoryStream.Length; 

var response = new HttpResponseMessage(); 
response.Headers.AcceptRanges.Add("bytes"); 
response.StatusCode = HttpStatusCode.OK; 
response.Content = new StreamContent(memoryStream); 
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
response.Content.Headers.ContentLength = contentLength; 
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
{ 
    FileName = Path.GetFileName(uploadPath + "\\" + fileName) 
}; 


return response; 
+0

コードを編集しましたが、ブラウザでファイルのダウンロード状況が確認できません。それは働かない –

関連する問題