c# - 使用 MemoryStream 在远程位置 c# 上写入 .docx 文件
问题描述
我正在从字符串生成 MemoryStream 并将其传递给另一个方法,该方法将以.docx
文件的形式将该 Stream 保存在远程位置。
public static MemoryStream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
上面的代码用于将字符串转换为 MemoryStream。我传递给上述方法的字符串是我通过Globals.ThisAddIn.Application.ActiveDocument.WordOpenXML
行获得的 XML。
文件成功上传到远程位置,但当我下载该文件时,MS Word 抛出错误File is corrupted. Either part of file is missing or invalid
(如下图所示)
我无法知道我生成的流是否错误/损坏,或者我需要执行更多操作以使该.docx
文件有效?
对不起这个问题,有很多这样的问题,但没有一个比这更有帮助。
解决方案
以这种方式传递的 XML 不是有效的 DOCX 文件。实际的 DOCX 格式使用带有文件夹的压缩内容。您需要将文件从您的插件保存到一个临时位置(最好使用GetTempPath,然后将文件从磁盘读取到您的内存流中,并将其上传到您需要的任何地方。
推荐阅读
- python - Pandas 中一个特定列的名称没有改变
- flutter - 如何解决flutter dropdownButtonFormField动态选择检查dropdownButton的值
- php - 跨php页面的会话变量不一样
- c++ - 标准差的输出为 NaN - C++
- python - 为什么使用 OneHotEncoding 可以更好地执行 NN?
- reactjs - 使用 API 身份验证反应私有路由验证
- python - Sympy 向量加法返回 sympy.core.add.Add 而不是 sympy.vector.vector.VectorAdd
- processing - 如何使事件每 8 帧和最后两帧(处理)发生一次?
- r - 将多个值与 R Dataframe 中的多个值进行比较
- java - 即使 GlobalHandler 类在其他包中,@ControllerAdvice 也无法正常工作-Spring MVC 异常处理