【问题标题】:Return pdf byte array WCF返回pdf字节数组WCF
【发布时间】:2016-06-01 05:59:17
【问题描述】:

我正在使用 Web 服务 WCF 以字节数组格式返回 PDF 文件。我只是返回我在这样的资源中拥有的​​ pdf 文件:

public byte[] displayPDF(string pdfName){
    return Service.Properties.Resources.testFile;
}

但是在客户端,当我收到字节数组并将其写入我计算机上的文件时:

HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = 9999999;
var uri = new Uri("http://TestSite.azurewebsites.net/Service.svc/webHttp/displayPDF?pdfName=testFile.pdf");
var response = client.GetAsync(uri);
byte[] byteArray = response.Result.Content.ReadAsByteArrayAsync().Result;
var filePath = "C:\\Users\\Admin 1\\Documents\\temp.pdf"; 
System.IO.File.WriteAllBytes(filePath, byteArray);

它会在我的文档中写入一个 PDF 文件,但是当我单击它时,它说无法查看 PDF,因为它不受支持的文件类型或它可能已损坏。

我看过一些关于使用流发送而不是发送字节数组的帖子。我想知道是否有任何关于如何正确执行此操作的示例,以便我可以将字节数组或流或您建议的任何内容写入客户端的 pdf 文件,然后通过单击手动打开文件。

注意:我正在使用 REST 访问 Web 服务。因此,添加服务引用不是一种选择。

【问题讨论】:

标签: c# wcf rest pdf bytearray


【解决方案1】:

好的,我找到了答案,并尝试了它,它确实有效。所以答案是你应该使用 Stream 而不是字节数组。对于其他想要示例的人,我在服务器端将我的代码修改为:

public Stream displayPDF(string pdfName)
{
     MemoryStream ms = new MemoryStream();
     ms.Write(Service.Properties.Resources.testFile, 0, Service.Properties.Resources.testFile.Length);
     ms.Position = 0;
     WebOperationContext.Current.OutgoingResponse.ContentType = "application/pdf";
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-disposition", "inline; filename=" + pdfName);
     return ms;                         
}

在客户端:

Console.WriteLine("Started"); 
HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = 9999999;
var uri = new Uri("http://TestSite.azurewebsites.net/Service.svc/webHttp/displayPDF?pdfName=testFile.pdf");
var responseTask = client.GetStreamAsync(uri);
var response = responseTask.Result;
using (System.IO.FileStream output = new System.IO.FileStream(@"C:\Users\Admin 1\Documents\MyOutput.pdf", FileMode.Create))
{
    response.CopyTo(output);
}

【讨论】:

  • “Service.Properties.Resources.testFile”中“Service”的类型是什么?
  • 对处理 MemoryStream 感到好奇,您是否应该担心在这里使用“using”语句或 try-finally 来处理它?
  • 有趣!你有理由解释为什么流比字节数组更可取吗?
猜你喜欢
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多