C# WEB API 响应下载 0 大小的文件
Posted
技术标签:
【中文标题】C# WEB API 响应下载 0 大小的文件【英文标题】:C# WEB API response downloads 0 size file 【发布时间】:2020-08-29 14:58:03 【问题描述】:我下面的 API 操作应该会发送一个 zip 文件(最大 100mb)作为结果。代码中没有抛出错误,但是下载的文件大小为 0。我检查了内容长度,内容长度有值。可能是什么原因。
[HttpGet]
[Route("AsyncDownloadFile")]
public async Task<HttpResponseMessage> AsyncDownloadFile(int ModuleID, string LicenseKey, string Version)
try
ClientOutletsDAL co = new ClientOutletsDAL();
//var localFilePath = "path/zz.zip"
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
Stream streamToCopyTo= new MemoryStream();
using (FileStream fs = new FileStream(localFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true))
await fs.CopyToAsync(streamToCopyTo);
response.Content = new StreamContent(streamToCopyTo);
//Set the Response Content Length.
response.Content.Headers.ContentLength = streamToCopyTo.Length;
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = Path.GetFileName(localFilePath);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
return response;
catch (Exception ex)
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message );
return response;
【问题讨论】:
我敢打赌,复制文件流后,您必须将流位置重置为 0streamToCopyTo
【参考方案1】:
问题通过添加解决了
streamToCopyTo.Position = 0;
之后
response.Content = new StreamContent(streamToCopyTo);
【讨论】:
【参考方案2】:我注意到您的代码中有以下内容
new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
但它没有被使用,但它似乎试图打开同一个文件,所以我想知道你是否是文件共享问题。
另外,您是否确实拥有权限(只是检查),最后,您是否已通过此代码验证 streamToCopyTo 中是否有数据?
干杯
【讨论】:
HI 问题是因为 streamToCopyTo.Position = 0;失踪以上是关于C# WEB API 响应下载 0 大小的文件的主要内容,如果未能解决你的问题,请参考以下文章
不可接受的响应 (406) 消息 Asp.NET 代码 Web API (C#) - .NET 5.0
C# API - 提供从 Azure Blob 存储下载的文件
如何使用 API 和 c# 从 azure DevOps 服务器下载文件到指定路径
从 .NET Core Web API 调用 SalesForce API 并将响应反序列化为 c# 对象?