0

ファイル ストリームと共に投稿データを送信する必要があります。次のコードを使用しています。

このコードは http://technet.rapaport.com/Info/LotUpload/SampleCode/Full_Example.aspxから取得したものです。

private Stream GetPostStream(string filePath, Dictionary<string, string> paramMap, string boundary) {

        Stream postDataStream = new System.IO.MemoryStream();

        //adding form data
        string formDataHeaderTemplate = Environment.NewLine + "--" + boundary + Environment.NewLine +
            "Content-Disposition: form-data; name=\"{0}\";" + Environment.NewLine + Environment.NewLine + "{1}";
        foreach (KeyValuePair<string, string> pair in paramMap)
        {
            byte[] formItemBytes = System.Text.Encoding.UTF8.GetBytes(string.Format(formDataHeaderTemplate, pair.Key, pair.Value));
            postDataStream.Write(formItemBytes, 0, formItemBytes.Length);
        }

        //adding file data
        FileInfo fileInfo = new FileInfo(filePath);

        string fileHeaderTemplate = Environment.NewLine + "--" + boundary + Environment.NewLine +
        "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" +
        Environment.NewLine + "Content-Type: application/vnd.ms-project" + Environment.NewLine + Environment.NewLine;

        byte[] fileHeaderBytes = System.Text.Encoding.UTF8.GetBytes(string.Format(fileHeaderTemplate, "UploadMPPFile", fileInfo.FullName));

        postDataStream.Write(fileHeaderBytes, 0, fileHeaderBytes.Length);

        FileStream fileStream = fileInfo.OpenRead();

        byte[] buffer = new byte[1024];

        int bytesRead = 0;

        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            postDataStream.Write(buffer, 0, bytesRead);
        }

        fileStream.Close();

        byte[] endBoundaryBytes = System.Text.Encoding.UTF8.GetBytes("--" + boundary + "--");
        postDataStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);

        return postDataStream;
    }

JAVA 上にあるサーバー側では、MPXJ サードパーティ ライブラリを使用してファイル データを読み取ります。ただし、次の例外が発生しています。ヘッダー署名の不一致エラーが報告されます。

ネストされた例外は次のとおりです: net.sf.mpxj.MPXJException: Error reading file] と根本原因 java.io.IOException: Invalid header signature; 0x2D2D2D2D2D2D0A0D を読み取り、net.sf で org.apache.poi.poifs.filesystem.POIFSFileSystem.(POIFSFileSystem.java:153) で org.apache.poi.poifs.storage.HeaderBlockReader.(HeaderBlockReader.java:125) で 0xE11AB1A1E011CFD0 を期待。 mpxj.mpp.MPPReader.read(MPPReader.java:84)

誰かがこの状況で私を助けて、いくつかの解決策を提案してくれませんか!

どうもありがとう。

4

1 に答える 1

0

受信側が、ストリームに書き込んでいるヘッダー データをペイロード データから分離していないように見えます。次のことを試す価値があるかもしれません。

  1. postDataStream.Write の呼び出しをローカル ファイル ストリームへの書き込みに置き換えることで、MPP ファイルを正しく読み取っていることを検証します。作成したファイルの内容が、読み取っているファイルと同一であることを検証します。
  2. サーバー側の受信コードを、受信データをファイルにエコーするだけのものに置き換えて、受信内容を検証できるようにします。
  3. 既存の受信コードを更新して、抽出されたヘッダー データとペイロード データを別々のファイルに書き込み、両方が正しく受信されていること、およびペイロード ファイルがクライアントから送信されたものと一致していることを検証します。
于 2012-05-01T13:46:19.937 に答える