0

サーブレットへの HTTP 呼び出しを試みる次のコード スニペットがあります。

    try {
        // Construct data
        String data = URLEncoder.encode("rpt_type", "UTF-8") + "=" + URLEncoder.encode(reportType, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_project", "UTF-8") + "=" + URLEncoder.encode(reportProject, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_mrv_creator", "UTF-8") + "=" + URLEncoder.encode(reportMrvCreator, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_gi_recipient", "UTF-8") + "=" + URLEncoder.encode(reportGiRecipient, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_plant", "UTF-8") + "=" + URLEncoder.encode(reportPlant, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_sloc", "UTF-8") + "=" + URLEncoder.encode(reportStorageLoc, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_gi_no", "UTF-8") + "=" + URLEncoder.encode(reportGiNo, "UTF-8");
        data += "&" + URLEncoder.encode("date_sap_gi_fr", "UTF-8") + "=" + URLEncoder.encode(reportDateGiFrom, "UTF-8");
        data += "&" + URLEncoder.encode("date_sap_gi_to", "UTF-8") + "=" + URLEncoder.encode(reportDateGiTo, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_partno", "UTF-8") + "=" + URLEncoder.encode(reportPartNo, "UTF-8");
        data += "&" + URLEncoder.encode("rpt_so_no", "UTF-8") + "=" + URLEncoder.encode(reportSvcOrderNo, "UTF-8");
        data += "&" + URLEncoder.encode("date_scan_fr", "UTF-8") + "=" + URLEncoder.encode(reportDateScanFrom, "UTF-8");
        data += "&" + URLEncoder.encode("date_scan_to", "UTF-8") + "=" + URLEncoder.encode(reportDateScanTo, "UTF-8");
        System.out.println("[data]\n" + data);

        // Send data
        String urlString = "http://localhost:8080/aerobook/GIStatusReportDownload?" + data;
        System.out.println("[url] " + urlString);
        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();
        //conn.setDoOutput(true);
        //OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        //wr.write(data);
        //wr.flush();

        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            System.out.println(line);
        }
        //wr.close();
        rd.close();
    } catch (Exception e) {
    }

私のデバッグ出力:

[data]
rpt_type=d&rpt_project=aaa&rpt_mrv_creator=bbb&rpt_gi_recipient=ccc&rpt_plant=ddd&rpt_sloc=eee&rpt_gi_no=fff&date_sap_gi_fr=02%2F05%2F2012&date_sap_gi_to=03%2F05%2F2012&rpt_partno=ggg&rpt_so_no=hhh&date_scan_fr=26%2F05%2F2012&date_scan_to=31%2F05%2F2012
[url] http://localhost:8080/aerobook/GIStatusReportDownload?rpt_type=d&rpt_project=aaa&rpt_mrv_creator=bbb&rpt_gi_recipient=ccc&rpt_plant=ddd&rpt_sloc=eee&rpt_gi_no=fff&date_sap_gi_fr=02%2F05%2F2012&date_sap_gi_to=03%2F05%2F2012&rpt_partno=ggg&rpt_so_no=hhh&date_scan_fr=26%2F05%2F2012&date_scan_to=31%2F05%2F2012

サーブレット (上記のコードとは別のファイル) で、ダウンロード用の Excel ファイルを生成します。

    res.setContentType(sContentType);
    res.setHeader("Content-Disposition", "attachment;filename=\"" + sExcelFileName + "\"");
    OutputStream oOutStrm = res.getOutputStream();
    wbBook.write(oOutStrm);
    oOutStrm.close();

ここでの問題は、(上記のデバッグ出力に示されているように) コードによって生成された URL から、サーブレットにアクセスでき、名前を付けて保存ダイアログを表示できることです。

コード内で使用するために生成されたファイルの内容を取得したいと思います。コードからバイトストリームまたはその他の形式で添付ファイルを取得する方法はありますか?


編集#3:上部をクリーンアップ

4

4 に答える 4

1

ブラウザに URI を入力すると、GET 要求が実行されます。ただし、クライアントの Java コードは POST 要求を生成し、URI ではなく本文でパラメーターを送信します。

HTTP トレースを見て比較することをお勧めします。

于 2012-05-03T12:21:47.230 に答える
0

wbBook.write(oOutStrm);outputStream に何かが書き込まれているかどうかを確認します。また、閉じる前に呼び出す必要がありますoOutStrm.flash()

于 2012-05-03T12:00:16.287 に答える
0

I want to get the contents of the excel file on my code, but so far it's not working.

コードにエラーはありません。コンテンツを入力ストリームからオブジェクト
に変換したいと考えています。 次のコード スニペットが役に立ちます。 HSSFWorkbook

java.net.URLConnection conn = url.openConnection();  
java.io.InputStream is = conn.getInputStream();  
org.apache.poi.hssf.usermodel.HSSFWorkbook workBook = new org.apache.poi.hssf.usermodel.HSSFWorkbook( is );  
System.out.println( "Number of Sheets: " + workBook.getNumberOfSheets() );  
org.apache.poi.hssf.usermodel.HSSFSheet sheet = workBook.getSheetAt( 0 );  
System.out.println( "Sheet Name: " + sheet.getSheetName() );  

// rest of your code to handle the captured workBook
// cheers
于 2012-05-03T14:25:24.390 に答える
0

問題が にあるとは思えません OutputStream oOutStrm = res.getOutputStream();

きっとそうresで、レスポンスでバイナリデータを書き込むのに適した をHttpServletResponse返します。ServletOutputStreamサーブレット コンテナはバイナリ データをエンコードしません

API を確認する

したがって、fileName 以外は何も得られない可能性があります。

サーブレットで試す

FileOutputStream stream = new FileOutputStream("c:/excel/Book1.xls");
workBook.write(stream);
于 2012-05-03T12:30:44.000 に答える