2011-12-17 37 views
0

このコードを変更するには強制上書き以前に開いた既存のファイルがドライブに保存されていますか?これは、クライアント側でpdfファイルを開くためのサーブレットの一部です。サーブレット - ダウンロードしたファイルを強制的に上書きする

response.reset(); 
response.setContentType("application/pdf"); 
response.setContentLength(file.length()); 
response.setHeader("Content-disposition", "inline; 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]; 
    int length; 
    while ((length = input.read(buffer)) > 0) 
    { 
    output.write(buffer, 0, length); 
    } 
} 
finally 
{ 
    close(output); 
    close(input); 
} 

オープンされたファイルの次のコピーには、新しいインデックスが付けられます。 test.pdf、test(1).pdfなど

答えて

3

あなたはできませんを制御します。クライアントのOSのファイルシステムの実装に依存している

+0

ありがとうございました。それはちょっと迷惑なので、時間を手動で削除する必要があります:( – gaffcz

+0

またはファイルの動的な名前を生成することができます.. –

+0

* "あなたはそれを制御することはできません" *幸いなことに。あなたのアプリは*かもしれませんが、あなたのアプリは** my *コンピュータの**ゲスト**です。 –

1

あなたはそれがFirefoxで例えば、上書きするかどうかを尋ねるためにクライアントブラウザを設定するには、それを行うことができ、最良さんへ enter image description here

上書きするように私の知識がOperaのデフォルトの動作です。

+0

Servletでクライアントにこれを実行させることはできません:) –

+0

これは_changeをこのコード部分で忘れたようです。 –

+0

ありがとうOleg。私はこれをちょうどこのようにしています、問題は、これが他のすべてのダウンロードに影響することです。だから私はサーブレットでそれを行うことができると思った:) – gaffcz

0

書き込みの前に、指定されたファイルが存在するかどうかを確認しますか? ファイルapi file.exists()がある場合は、ファイルapi file.delete()を使用して指定のファイルを削除し、書き込みプロセスを続行します。

+1

これらはサーバのJVMで呼び出される。ファイルはクライアントのマシンにあります –

関連する問題