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