我正在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应用程序时,下载顺利进行,但文件在打开时无法加载。
答案 0 :(得分:-3)
我建议使用FileContentResult class而不是直接在控制器中操作响应对象。以下代码将在ASP.NET控制器或ApiController中使用:
public FileContentResult Get()
{
byte[] data = new YourPdfService().GeneratePdf();
return new FileContentResult(data, "application/pdf");
}