10

ストリームは、ajax を介して html フォームから取得されます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 の値がストリームに対して有効でないため、パッケージを開くことができません。

FileModeまたは FileAccess の値がストリームに対して有効ではないため、パッケージを開くことができませんが、有用なものが見つかりません。何か案は?

PS: 最初に、ここに掲載するコードを大幅に簡略化しました。Sten Petrov による懸念を解消するために、if ステートメントを追加しました。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);ますので、問題を抱えている将来の人々のために私が何をしたかを理解していただければ幸いです。

4

4 に答える 4

6

リクエスト ストリームが完全にダウンロードされていない可能性があるため、あなたがしていることはトラブルを求めていることです。

最初にファイルを MemoryStream にダウンロードするか、ファイルとしてダウンロードすることをお勧めします。後者のオプションについてはこちらを参照してから、アップロードされたファイルに対して必要なことを行います。

于 2013-07-26T18:10:56.597 に答える
3

読み取りまたは読み取り書き込みアクセスでストリームが正しく開かれていないと思います。

WordprocessingDocument.Open メソッド (ストリーム、ブール値) についてMSDNから

IOException: 「ストリーム」が読み取り (ReadWrite) アクセスで開かれていない場合にスローされます。

于 2013-07-26T19:29:22.733 に答える
2

メソッドWordprocessingDocument.Openは次のように定義されます。

public static WordprocessingDocument Open(Stream stream, bool isEditable)

readStream.CanReadの値を2 番目のパラメーターとして渡します。これは私には正しくないようです。CanReadがの場合、ストリームを読み取ることができることを示します。ストリームがおそらくサポートしていない編集可能としてtrueを開こうとしています。2 番目のパラメーターWordprocessingDocumentを渡すだけです。falseそれ以外の場合は合格readStream.CanWriteですが、このプロパティが常に返されても驚かないでくださいfalse(アップロードされたファイルからのストリームを処理するときに予想されるように)。

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

于 2013-07-26T19:35:45.803 に答える