gpt4 book ai didi

c# - 通过 C# 3.5 中的 WebRequest 将服务报告为 PDF "Not Supported File Type"

转载 作者:太空狗 更新时间:2023-10-29 23:42:45 24 4
gpt4 key购买 nike

我继承了一个遗留应用程序,该应用程序应该从报告服务服务器获取动态 pdf。一切正常,直到您尝试打开返回的 pdf 并且 adobe acrobat 告诉您:

Adobe Reader could not open 'thisStoopidReport'.pdf' because it is either not a supported file type or because the file has been damaged(for example, it was sent as an email attachment and wasn't correctly decoded).

我已经对此进行了一些初步的故障排除。如果我用本地计算机上的有效 pdf 文件替换 WebRequest.Create() 调用中的 url,即:@"C:temp/validpdf.pdf"),那么我会得到一个有效的 PDF。

报告本身似乎工作正常。如果我手动键入应该生成 pdf 文件的报告服务报告的 URL,系统会提示我进行用户身份验证。但是在提供它之后我得到了一个有效的 pdf 文件。

出于显而易见的原因,我已将下面代码中的实际 url、用户名、用户密码和域字符串替换为虚假值。

        WebRequest request = WebRequest.Create(@"http://x.x.x.x/reportServer?/reports/reportNam&rs:format=pdf&rs:command=render&rc:parameters=blahblahblah");
int totalSize = 0;
request.Credentials = new NetworkCredential("validUser", "validPass", "validDomain");
request.Timeout = 360000; // 6 minutes in milliseconds.
request.Method = WebRequestMethods.Http.Post;
request.ContentLength = 0;
WebResponse response = request.GetResponse();
Response.Clear();
BinaryReader reader = new BinaryReader(response.GetResponseStream());
Byte[] buffer = new byte[2048];
int count = reader.Read(buffer, 0, 2048);
while (count > 0)
{
totalSize += count;
Response.OutputStream.Write(buffer, 0, count);
count = reader.Read(buffer, 0, 2048);
}
Response.ContentType = "application/pdf";
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.CacheControl = "private";
Response.Expires = 30;
Response.AddHeader("Content-Disposition", "attachment; filename=thisStoopidReport.pdf");
Response.AddHeader("Content-Length", totalSize.ToString());
reader.Close();
Response.Flush();
Response.End();

最佳答案

查看您在 notepad.exe 中返回的 pdf 文件。我怀疑您会在其中看到 HTML。如果您调用的网页是传递页面,则会切断一个 pdf 文件。 Web 请求将取回 HTML 而不是 PDF 文件。

如果你直接调用一个有pdf文件的网站,比如http://www.somesite.com/file.pdf你的代码会工作。问题是您可能通过网页隐藏了 pdf 文件的真实位置。

我解决这个问题的方法是创建一个 ISAPI DLL,允许您传入确定需要发回哪个 pdf 文件所需的参数。 ISAPI DLL 将流回内容类型为“application/pdf”的 pdf。

关于c# - 通过 C# 3.5 中的 WebRequest 将服务报告为 PDF "Not Supported File Type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com