我正在尝试从SSRS报告服务器的响应创建一个excel文件,在前端我成功地能够下载一个excel文件,但是当我打开它时我会得到错误。
由于文件格式或文件扩展名无效,xlsx excel无法打开文件。验证文件没有损坏,并且文件扩展名是否与文件的格式匹配。
以下是代码:
HttpWebRequest req =
(HttpWebRequest)WebRequest.Create(sTargetURL);
req.PreAuthenticate = true;
req.Credentials = new System.Net.NetworkCredential(strReportUser, strReportUserPW, strReportUserDomain);
HttpWebResponse HttpWResp = (HttpWebResponse)req.GetResponse();
Stream fStream = HttpWResp.GetResponseStream();
//Now turn around and send this as the response..
byte[] fileBytes = ReadFully(fStream);
string fileToAttach = Convert.ToBase64String(fileBytes);
HttpWResp.Close();
Stream stream = new MemoryStream(fileBytes);
result.Content = fileToAttach;
result.ContentType = "application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet";
result.FileName = fileName + ".xlsx";
result.result = true;
return result;任何帮助都将不胜感激。
发布于 2018-10-25 13:54:13
假设response是某种类型的HTTP对象,最终被发送到浏览器,并且fStream中有实际的Excel文件内容,那么问题是要将文件的Base64 64‘d版本作为内容发送( Excel不会理解这些内容):
Stream fStream = HttpWResp.GetResponseStream();
byte[] fileBytes = ReadFully(fStream);
string fileToAttach = Convert.ToBase64String(fileBytes);
result.Content = fileToAttach;因为我看不清response是什么,所以我只能说,您需要保持文件内容的原样。
如果要发送原始字节,可以执行以下操作:
Stream fStream = HttpWResp.GetResponseStream();
byte[] fileBytes = ReadFully(fStream);
result.Content = fileBytes;如果您的response能够处理流,这将是理想的方法(那么您不必在流和字节数据之间来回转换它)。
如果result.Content必须是字符串,那么您必须考虑使用哪种编码,它看起来如下所示:
Stream fStream = HttpWResp.GetResponseStream();
byte[] fileBytes = ReadFully(fStream);
result.Content = Encoding.UTF8.GetString(fileBytes);如果Excel需要被编码为UTF-16 (微软在内部大量使用它。),我不会感到惊讶。
https://stackoverflow.com/questions/52990921
复制相似问题