我正在使用此功能将报告编入pdf文件,并将其作为附件发送到电子邮件中。
string strNovaQueryString = string.Empty;
string pathFile = "";
string[] fields;
string[] values;
fields = ParamRelatorio.Split('|');
foreach (string key in fields)
{
string[] param= key.Split(new char[] { '=' });
strNovaQueryString += param[0] + "=" + param[1] + "&";
}
if (!string.IsNullOrEmpty(strNovaQueryString))
strNovaQueryString = strNovaQueryString.TrimEnd('&');
string url = reportURL + "/ViewReport.aspx?" + strNovaQueryString;
string userName = user;
string password = pass;
string strPostData = String.Format("user={0}&pass={1}", userName, password);
byte[] postData = Encoding.ASCII.GetBytes(strPostData);
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
req.ContentLength = postData.Length;
System.IO.Stream outputStream = req.GetRequestStream();
outputStream.Write(postData, 0, postData.Length);
outputStream.Close();
System.Net.HttpWebResponse rep = (System.Net.HttpWebResponse)req.GetResponse();
System.IO.Stream str = rep.GetResponseStream();
string contentType = rep.ContentType;
string fileType = "";
if (contentType != null)
{
string[] splitString = contentType.Split(';');
fileType = splitString[0];
}
if (fileType != null && fileType.ToLower() == "application/pdf")
{
byte[] buffer = new byte[8192];
int bytesRead = str.Read(buffer, 0, 8192);
while (bytesRead > 0)
{
byte[] buffer2 = new byte[bytesRead];
System.Buffer.BlockCopy(buffer, 0, buffer2, 0, bytesRead);
pathFile = attPath+ "reportName" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
BinaryWriter binaryWriter = new BinaryWriter(File.Open(pathFile, FileMode.Create));
binaryWriter.Write(buffer2);
binaryWriter.Close();
bytesRead = str.Read(buffer, 0, 8192);
}
}
return pathFile;
它将pdf文件保存在我想要的路径中(例如" C:// Documents // Att"),但pdf文件为空。
电子邮件正在发送,但pdf为空。我认为binaryWriter.Write(bytesRead);
没有按预期工作,或者变量是空的。
有什么建议吗?
答案 0 :(得分:1)
尝试使用System.IO.File.WriteAllBytes(string path, byte[] bytes)
代替BinaryWriter
。它简单得多。在这里查看MSDN文章:
https://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes%28v=vs.110%29.aspx
答案 1 :(得分:1)
你没有'调用Stream.Flush,但是关闭流(关闭不保证调用Flush)
并始终使用(var stream = ...) - 因为您必须确保该文件将被解除阻止。