XLSX Excel 无法打开该文件,因为文件格式或文件扩展名无效 - C#



我正在尝试从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;

任何帮助将不胜感激。

假设response是某种最终发送到浏览器的HTTP响应对象,并且您fStream中具有实际的Excel文件内容,则问题是您将Base64版本的文件作为内容发送(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(Microsoft内部大量使用它(,我不会感到惊讶。

最新更新