使用 WebClient 下载 PDF 时遇到问题
Trouble Downloading PDF with WebClient
我们有一个访问外部 API 以获取和下载 PDF 文件的过程。过程如下:
using (var client = new WebClient())
{
client.BaseAddress = add;
client.Encoding = System.Text.Encoding.UTF8;
client.Headers[HttpRequestHeader.ContentType] = "application/pdf";
client.Headers.Add(HttpRequestHeader.Authorization, "Basic ");
JObject jobject = generateReportPDFRequest(report.ReportID);
//string tst = jobject.ToString();
string result = client.UploadString(add, "POST", jobject.ToString());
if (!string.IsNullOrEmpty(result))
{
retval = AddReportPDF(reportid, Encoding.ASCII.GetBytes(result));
}
}
public static JObject generateReportPDFRequest(string reportid)
{
try
{
// create the object
JObject jsonRequest = new JObject();
// add version property
jsonRequest.Add("version", "1.0");
// add content object
JObject content = new JObject();
JObject repid = new JObject();
content.Add("customer-report-id", @"" + reportid + @"");
content.Add("content-type", "application/pdf");
JObject reportRequest = new JObject();
jsonRequest.Add("content", content);
return jsonRequest;
}
catch (Exception e)
{
string mess = e.Message;
}
return null;
}
我正在尝试使用 Encoding.ASCII.GetBytes(结果)过程获取 PDF,该过程是 return,WebClient 上传字符串 post。流被转换为字节数组并保存到数据库中。但是文件是空的。
有人告诉我,我将文件保存为 1.6 版,而下载的是 1.4 版。如果这是问题所在,我该如何定义 PDF 版本?如果没有,如何正确获取这些 PDF 文件?
如果您不想返回字符串,请不要使用 UploadString
。有一个适当的重载 UploadData
returns 你是一个 byte[] 数组。这样可以防止发生任何 encoding/decoding 事故的风险。
按如下方式调整您的代码:
using (var client = new WebClient())
{
client.BaseAddress = add;
client.Headers[HttpRequestHeader.ContentType] = "application/pdf";
client.Headers.Add(HttpRequestHeader.Authorization, "Basic ");
JObject jobject = generateReportPDFRequest(report.ReportID);
byte[] result = client.UploadData(
add,
"POST",
Encoding.UTF8.GetBytes(jobject.ToString()));
retval = AddReportPDF(reportid, result);
}
我们有一个访问外部 API 以获取和下载 PDF 文件的过程。过程如下:
using (var client = new WebClient())
{
client.BaseAddress = add;
client.Encoding = System.Text.Encoding.UTF8;
client.Headers[HttpRequestHeader.ContentType] = "application/pdf";
client.Headers.Add(HttpRequestHeader.Authorization, "Basic ");
JObject jobject = generateReportPDFRequest(report.ReportID);
//string tst = jobject.ToString();
string result = client.UploadString(add, "POST", jobject.ToString());
if (!string.IsNullOrEmpty(result))
{
retval = AddReportPDF(reportid, Encoding.ASCII.GetBytes(result));
}
}
public static JObject generateReportPDFRequest(string reportid)
{
try
{
// create the object
JObject jsonRequest = new JObject();
// add version property
jsonRequest.Add("version", "1.0");
// add content object
JObject content = new JObject();
JObject repid = new JObject();
content.Add("customer-report-id", @"" + reportid + @"");
content.Add("content-type", "application/pdf");
JObject reportRequest = new JObject();
jsonRequest.Add("content", content);
return jsonRequest;
}
catch (Exception e)
{
string mess = e.Message;
}
return null;
}
我正在尝试使用 Encoding.ASCII.GetBytes(结果)过程获取 PDF,该过程是 return,WebClient 上传字符串 post。流被转换为字节数组并保存到数据库中。但是文件是空的。
有人告诉我,我将文件保存为 1.6 版,而下载的是 1.4 版。如果这是问题所在,我该如何定义 PDF 版本?如果没有,如何正确获取这些 PDF 文件?
如果您不想返回字符串,请不要使用 UploadString
。有一个适当的重载 UploadData
returns 你是一个 byte[] 数组。这样可以防止发生任何 encoding/decoding 事故的风险。
按如下方式调整您的代码:
using (var client = new WebClient())
{
client.BaseAddress = add;
client.Headers[HttpRequestHeader.ContentType] = "application/pdf";
client.Headers.Add(HttpRequestHeader.Authorization, "Basic ");
JObject jobject = generateReportPDFRequest(report.ReportID);
byte[] result = client.UploadData(
add,
"POST",
Encoding.UTF8.GetBytes(jobject.ToString()));
retval = AddReportPDF(reportid, result);
}