2016-04-22 270 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選項/參數。