在.net4.5框架下使用c#下载大文件的webapi接口示例,不引用using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc;
时间: 2024-10-22 21:16:51 浏览: 28
在.NET Framework 4.5中,由于缺乏`System.Threading.Tasks`和`Microsoft.AspNetCore.Mvc`的异步支持,我们需要使用传统的同步方法来下载大文件。这里提供一个简化版的例子,但需要注意,这样的做法对于大文件可能会导致性能不佳,因为所有数据会被加载到内存中再一次性发送。
```csharp
using System.Net;
using System.IO;
public class FileController : ApiController
{
[HttpGet]
public HttpResponseMessage Download(string filename)
{
try
{
// 检查文件是否存在
string filePath = "YourFilePath/" + filename; // 替换为实际文件路径
if (!System.IO.File.Exists(filePath))
return Request.CreateResponse(HttpStatusCode.NotFound);
// 计算文件大小
long fileSize = System.IO.FileInfo.FromFileName(filePath).Length;
// 创建一个HttpResponseMessage实例
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(new FileStream(filePath, FileMode.Open));
// 设置头信息
response.Content.Headers.ContentDisposition = ContentDispositionHeaderValue.CreateAttachment(filename);
response.Content.Headers.ContentLength = fileSize.ToString();
return response;
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
}
}
}
```
上述代码中,我们直接创建了`HttpResponseMessage`实例,并通过`FileStream`将整个文件内容读入。这种方式适用于小文件,但对于大文件会消耗大量内存,因此在生产环境中应该避免。
阅读全文