2016-04-22 371 views
3

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

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

回答

0

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