c# - OpenXml 无法打开包,因为 FileMode 或 FileAccess 值对流无效

标签 c# openxml openxml-sdk

流来自 html 表单,通过 ajax var jqXHR = data.submit();

public static GetWordPlainText(Stream readStream,string filePath)
{
   WordprocessingDocument.Open(readStream, readStream.CanRead);
}
[HttpPost]
public ActionResult FileUpload() 
{
 var MyFile = Request.Files[0];
 if (Request.Files.Count > 0 && MyFile != null)
 {
  GetWordPlainText(Request.InputStream);
 }
}

我收到这个错误:

Cannot open package because FileMode or FileAccess value is not valid for the stream.

我用谷歌搜索 无法打开包,因为 FileMode 或 FileAccess 值对流无效 但找不到任何有用的东西。有什么想法吗?

PS:最初我简化了这里发布的代码。添加了 if 语句,以便消除 Sten Petrov 的担忧。我希望 Request.File.count>0 确实解决了他的问题……我仍然有同样的问题……

更新

作为解决方法,我按照下面的建议将文件保存到一个目录,然后我使用 openxml 从目录中读取它

  var MyFile = Request.Files[0];
  var path = Path.Combine(Server.MapPath("~/App_Data/temp"), MyFile.FileName);
                using (MemoryStream ms = new MemoryStream())
                {
                    //if file exist plz!!!! TODO

                    Request.Files[0].InputStream.CopyTo(ms);
                    System.IO.File.WriteAllBytes(path, ms.ToArray());
                }

然后 WordprocessingDocument.Open 有一个文件路径的实现所以 WordprocessingDocument.Open(path); 希望您了解我为 future 遇到问题的人所做的工作。

最佳答案

你这样做是自找麻烦,因为 Request 流可能没有完全下载。

我建议您先将文件下载到 MemoryStream 中或作为文件下载,see here对于后一个选项,然后对上传的文件执行任何操作。

关于c# - OpenXml 无法打开包,因为 FileMode 或 FileAccess 值对流无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888076/

相关文章:

C# Rx DistinctUntilChanged() 用于任何结果,包括列表

c# - 在 Windows 商店应用程序中获取窗口宽度/高度

excel - 什么表明 Office Open XML 单元格包含日期/时间值?

c# - ASP.NET MVC 无法流式传输文件

excel - 打开 XML SDK - 保存模板文件(.xltx 到 .xlsx)

c# - 无法使用带有 C# 的 Selenium 检查复选框控件

c# - WCF 与 XmlSerializer

c# - 封闭的 XML。将 DataTable 添加到现有 Excel 工作表

excel - Styles.xml 中没有 numFmt