2011-07-27 12 views

答えて

2

オブジェクトのOutputStream。クライアントに名前を付けて保存ダイアログを表示させるには、Content-Dispositionヘッダーをattachmentに設定する必要があります。 Content-Typeヘッダーも設定する必要があります。これにより、エンド・ユーザーが直ちにファイルを開く場合に、最終的に適切なアプリケーションをファイルに関連付けることができるように、ファイル・タイプをクライアントに知らせることができます。最後に、Content-Lengthヘッダーを設定することは、サービングパフォーマンスを向上させることが望ましい(さもなければ、サーブレットAPIは、より多くのバイトおよび処理時間を必要とするチャンクエンコードにフォールバックする)。

適切なヘッダを設定した後、それはHttpServletResponseOutputStream通常のJavaのIOの道へFileからInputStreamを書いているだけです。

private static final int DEFAULT_BUFFER_SIZE = 8192; // 8KB. 
// ... 

File file = createExcelFileSomehow(); 
// ... 

response.reset(); 
response.setBufferSize(DEFAULT_BUFFER_SIZE); 
response.setHeader("Content-Type", "application/vnd.ms-excel"); 
response.setHeader("Content-Length", String.valueOf(file.length())); 
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); 

BufferedInputStream input = null; 
BufferedOutputStream output = null; 

try { 
    input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE); 
    output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); 

    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
    for (int length; (length = input.read(buffer)) > -1;) { 
     output.write(buffer, 0, length); 
    } 
} finally { 
    if (output != null) try { output.close(); } catch (IOException ignore) {} 
    if (input != null) try { input.close(); } catch (IOException ignore) {} 
} 
0

を求めている。..ファイルへの書き込みのためのすべてのproccessは別の関数で行われ開いたり、オープンするダイアログボックスを促進またはサーブレット を使用してファイルへの完全な書き込み処理の後に、このファイルを保存することができますファイルをユーザーに送信しますか?

これが役立つことがあります。Servlet for serving static content

は、それからちょうどあなたがプレゼンテーションに使用するものは何でもからサーブレットにHTMLリンクを作成します。

0

ヘッダーを追加Content-Disposition:attachment

0

このコードスニペットは役に立ちます。 IEのブラウザでインラインでContent dispositionを指定すると、ダイアログボックスのプロンプトを表示せずにExcelを開くことができます。

response.setContentType("application/vnd.ms-excel"); 
response.setHeader("Content-disposition","inline;fileName=" + fileName); 
final java.io.OutputStream os = response.getOutputStream(); 

コールcreateExcel機能の受け渡しは、私はあなたがFileオブジェクトとして、あなたがクライアントにダウンロードとしてこれを提供したいというExcelファイルを持っていることを理解し

 
os.flush(); 
os.close(); 
関連する問題