正在下载损坏的PDF文件

时间:2017-10-23 18:10:37

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

我正在ASP.NET中开发一个功能,以便从byte[]下载pdf文件。

因此,我们使用Winnovative.PdfConverter.GetPdfBytesFromHtmlString功能来获取pdf字节。在下面的代码中,data变量是由...返回的byte[] Winnovative.PdfConverter.GetPdfBytesFromHtmlString

因此,data变量alrady具有需要在pdf文件中写入的字节。

注意:当我File.WriteAllBytes("a path", data)创建pdf文件并且可以阅读并且没有损坏时。

我想使用HttpResponse的原因是因为我希望下载文件,因为这是客户想要的。

简而言之,我希望下面编写的代码采用byte[] data变量,将其写入pdf文件并下载。

以下是代码:

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ClearContent();
response.ClearHeaders();
response.Cache.SetCacheability(HttpCacheability.Private);
response.CacheControl = "private";
response.AddHeader("Content-Type", "binary/octet-stream");
response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"; size=" + (object)data.Length);
response.AddHeader("Content-Length", data.Length.ToString((IFormatProvider)CultureInfo.InvariantCulture));
response.Flush();
response.BinaryWrite(data);
response.Flush();
response.End();

当我运行Web应用程序时,下载顺利进行,但文件在打开时无法加载。

1 个答案:

答案 0 :(得分:-3)

我建议使用FileContentResult class而不是直接在控制器中操作响应对象。以下代码将在ASP.NET控制器或ApiController中使用:

public FileContentResult Get()
{
    byte[] data = new YourPdfService().GeneratePdf();
    return new FileContentResult(data, "application/pdf");
}