【问题标题】:I have word encoded Base64 string. I want to read the contents only. how to do it?我有单词编码的 Base64 字符串。我只想阅读内容。怎么做?
【发布时间】:2017-06-20 11:32:28
【问题描述】:

plainText 已编码 word 文档 base64 字符串

byte[] buffer = Convert.FromBase64String(plainText);
using (Stream ms = new MemoryStream())
                    {
                        ms.Write(buffer, 0, (int)buffer.Length);
                    }

我尝试使用 OpenXML SDK 打开 word 文档

WordprocessingDocument wordDoc = WordprocessingDocument.Open(stream, true)

但它会抛出文件包含损坏的数据错误。

我也经历过MSDN link OpenXML SDK

我用这个字节[] 缓冲区创建了一个word文档 但我想要实现的是,在不创建(保存)word 文档的情况下阅读文档中存在的内容。 我错过了什么?

【问题讨论】:

  • 如果你想用 interop 阅读它,我认为你必须保存它(也许之后马上删除它?)
  • 嗨@EpicKip 感谢您的及时回复。我正在从 web api 获取 base64 字符串,它是一个编码为 base64 字符串的 word 文档。我正在尝试阅读其中的内容。这些都必须在客户端完成,所以我无法保存。有没有可能的方法来实现它?
  • 我认为它不可能看到:stackoverflow.com/questions/18184616/… 但我认为如果它在临时 appdata 文件夹中,您可能可以在客户端保存:Path.GetTempPath();
  • 是的@EpicKip 我明白了。但是是否有任何解决方法可以从编码的 base64 word 文档字符串中读取内容?在运行时?因为当我将base64字符串转换为字节数组并生成了一个word文档时。我可以看到内容。如果您能找到解决方案,这将是一个很大的帮助。

标签: c# arrays base64 openxml-sdk memorystream


【解决方案1】:

这里最可能的问题是您没有倒带流。任意设置

ms.Position = 0;

或者使用接受byte[]的构造函数,而不是调用.Write

using (Stream ms = new MemoryStream(buffer)) {...}

【讨论】:

  • 我收到“文件包含损坏的数据”错误@Gravell,但如果我将字节数组保存到文件,我可以看到我的内容在我的情况下,我不应该保存。跨度>
  • @Sai 如果缓冲区包含正确的内容 并且 流被正确地倒带,那么要么WordprocessingDocument 从根本上被破坏,要么你误认为前两个之一断言(它包含正确的内容并且被正确地倒带)
  • 我猜缓冲区包含正确的内容,因为当我使用缓冲区(字节数组)生成 word 文件时。我可以看到我的内容。但就我而言,我不应该保存文件。
  • @Sai 你倒带了吗?
  • 我找不到你。你能告诉你倒带是什么意思吗?@Gravell
猜你喜欢
  • 2023-01-04
  • 1970-01-01
  • 2022-01-17
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 2013-06-04
  • 1970-01-01
相关资源
最近更新 更多