c#使用HttpResponseMessage下载大文件接口
时间: 2024-10-22 19:13:55 浏览: 32
在 C# 中,如果你需要通过 HTTP 请求下载大文件并返回给客户端,通常会创建一个 API 接口,使用 HttpResponseMessage 来处理这个过程。下面是一个基本的示例:
```csharp
using System.Net.Http;
using System.IO;
public class FileDownloadService
{
private readonly HttpClient _httpClient;
public FileDownloadService()
{
_httpClient = new HttpClient();
}
// 使用异步方法处理大文件下载,避免阻塞主线程
public async Task<HttpResponseMessage> DownloadFileAsync(string url)
{
try
{
HttpResponseMessage response = await _httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
// 检查响应内容是否为字节流
Stream contentStream = await response.Content.ReadAsStreamAsync();
if (contentStream != null)
{
string fileName = Path.GetFileName(response.RequestUri.PathAndQuery); // 获取文件名
using (FileStream fileStream = File.Create(fileName))
{
contentStream.CopyTo(fileStream);
}
return response; // 返回包含状态信息的响应
}
else
{
throw new Exception("Response is not a stream");
}
}
catch (Exception ex)
{
return ResponseMessageFactory.CreateErrorResponse(HttpStatusCode.InternalServerError, "Failed to download file: " + ex.Message);
}
}
private static HttpResponseMessage ResponseMessageFactory(HttpStatusCode statusCode, string message)
{
var response = new HttpResponseMessage(statusCode);
response.Content = new StringContent(message, Encoding.UTF8, "text/plain");
return response;
}
}
```
在这个例子中,`DownloadFileAsync` 方法首先发送 GET 请求获取文件,并检查响应是否为字节流。如果是,它将文件保存到本地,然后返回包含下载完成状态的 HttpResponseMessage。如果出错,则返回错误响应。
阅读全文