C#文件下载已损坏

时间:2016-04-22 22:28:06

标签: c# asp.net-web-api download

我在Web API项目的实用程序中有一些C#。代码的上传部分工作正常;我已经验证了获取服务器的文件与上传的文件相匹配。但是,下载中发生的某些事情导致客户端将文件视为已损坏,当我执行差异时,我可以看到出现问题。

Code Compare diff of the files

不幸的是,我无法弄清楚我做错了什么。该实用程序的相关部分如下:

public static HttpResponseMessage StreamResponse(this HttpRequestMessage request, Stream stream)
{
    if (stream.CanSeek) stream.Position = 0;// Reset stream if possible

    HttpResponseMessage response = request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StreamContent(stream);
    if (stream is FileStream)
    {// If this is a FileStream, might as well figure out the content type
        string mimeType = MimeMapping.GetMimeMapping(((FileStream)stream).Name);
        response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(mimeType);
    }
    return response;
}

public static HttpResponseMessage DownloadAs(this HttpResponseMessage response, string fileName)
{
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = fileName;
    response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(MimeMapping.GetMimeMapping(fileName));
    return response;// For chaining or whatnot
}

我在API控制器中的用法是return ResponseMessage(Request.StreamResponse(stream).DownloadAs("Filename.ext"));

我已经仔细检查了下载代码,这似乎与我发现的相符。 我做错了什么或我错过了什么?看起来编码或字符集有问题,但我不知道解决方案是什么。

1 个答案:

答案 0 :(得分:0)

最后通过this Q&A找出了问题。我在客户端代码的$http调用中缺少responseType选项/参数。