2009-07-16 4 views
1

私はこれが少し広範であることを知っていますが、ここに状況があります:Javaは画面にファイルを出力します

私はJSPとJavaを使用しています。私は自分のサーバー上にあるファイルを持っています。クリックすると、ユーザーが見るためにファイルを開く画面へのリンクを追加したいと思います。ファイルは、Webブラウザのウィンドウに表示されるか、またはファイルを開くために必要なプログラムをポップアップさせることができます(Adobeがファイルを表示するために開くiTextでスクリーンに出力するときと同様です)。私はすでに出力ストリームを知っていますが、ファイルを出力ストリームにどのように書き込むことができますか?私が読んだことのほとんどはテキストファイルだけを扱っていましたが、イメージファイルなども扱っていました。

ご協力いただきましてありがとうございます。 ありがとう!

答えて

1

ここでそれを達成する方法についての簡単な実装です:

protected void doPost(final HttpServletRequest request, 
     final HttpServletResponse response) throws ServletException, 
     IOException { 

    // extract filename from request 
    // TODO use a whitelist to avoid [path-traversing][1] 
    File file = new File(getFileName(request)); 
    InputStream input = new FileInputStream(file); 

    response.setContentLength((int) file.length()); 
    // TODO map your file to the appropriate MIME 
    response.setContentType(getMimeType(file)); 

    OutputStream output = response.getOutputStream(); 
    byte[] bytes = new byte[BUFFER_LENGTH]; 
    int read = 0; 
    while (read != -1) { 
     read = input.read(bytes, 0, BUFFER_LENGTH); 
     if (read != -1) { 
      output.write(bytes, 0, read); 
      output.flush(); 
     } 
    } 

    input.close(); 
    output.close(); 
} 
1

正しいMIMEタイプのファイルを応答出力ストリームに書き込む「ダウンロード」サーブレットを作成する必要があります。 .jspファイル内からこれを確実に行うことはできません。

私たちは通常、サーブレットマッピングを/ downloadsに設定した後、パス情報を追加して、提供するアセットを特定します。サーブレットは要求が有効であることを確認し、MIMEヘッダーを設定してファイルを出力ストリームに配信します。それは簡単ですが、J2EE javadocを便利な状態に保ちます。

2

応答に特定のフィールドを追加する必要があります。テキスト/ CSV形式の場合は、あなたがしたい:

response.setContentType("text/csv"); // set MIME type 
response.setHeader("Content-Disposition", "attachment; filename=\"" strExportFileName "\""); 

ここではそれについてsun上のフォーラムです。