在.Net MVC中下载文件

时间:2016-07-01 14:58:02

标签: c# asp.net .net asp.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 个答案:

答案 0 :(得分: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;