xlsx excel无法打开文件,因为文件格式或文件扩展名无效-C#

时间:2018-10-25 13:47:09

标签: 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;

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

假设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 uses it quite heavily internally),这不会让我感到惊讶。