OpenXml не удается открыть пакет, так как значение FileMode или FileAccess недопустимо для потока

поток поступает из 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);
 }
}

я получаю эту ошибку:

не удается открыть пакет, так как значение FileMode или FileAccess недопустимо для потока.

Я google не удается открыть пакет, так как значение FileMode или FileAccess недопустимо для потока но не могу найти ничего полезного. Есть идеи?

PS: Первоначально я упростил код, который будет размещен здесь, чтобы много. Добавил если утверждение таково, что оно сотрет озабоченность Стэна Петрова. Надеюсь, просьба.Файл.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 имеет реализацию для filepath так WordprocessingDocument.Open(path); надеюсь, вы получите представление о том, что я сделал для будущих людей, у которых есть проблемы.

3 ответов


то, что вы делаете, вызывает проблемы, потому что поток запросов, возможно, не был полностью загружен.

Я предлагаю вам загрузить файл сначала в MemoryStream или в виде файла, посмотреть здесь для последнего варианта, а затем сделать все, что вы хотите, чтобы загруженный файл.


Я думаю, что поток неправильно открыт с доступом для чтения или readwrite.

с MSDN о WordprocessingDocument.Открыть метод (Stream, Boolean)

исключение IOException: Выбрасывается, когда" поток " не открывается с доступом Read (ReadWrite).


метод WordprocessingDocument.Open определено как:

public static WordprocessingDocument Open(Stream stream, bool isEditable)

вы передаете значение readStream.CanRead как второй параметр. Мне это кажется неправильным. Когда CanRead is true, указывая, что поток можно прочитать, вы пытаетесь открыть WordprocessingDocument как редактируемый, который поток, вероятно, не поддерживает. Я бы просто прошел false для второго параметра. В противном случае, pass readStream.CanWrite но не удивляйтесь, если это свойство всегда возвращает false (как я и ожидал, когда работа с потоками из загруженных файлов).

http://msdn.microsoft.com/en-us/library/office/cc536138.aspx