2011-12-17 9 views
0

Как изменить этот код на force overwrite существующий ранее открытый файл, сохраненный на диске? Это часть сервлета для открытия PDF-файлов на стороне клиента.Servlet - принудительно перезаписать загруженный файл

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

Спасибо, Jigar. Это немного раздражает, поэтому я должен время от времени удалять его :( – gaffcz

+0

Или вы можете генерировать динамические имена файла .. –

+0

* «Вы не можете это контролировать». * К счастью. Никогда не перестаешь удивлять меня, сколько разработчиков подумайте, что у них есть способность * или право * заставить конечного пользователя делать (или не делать) что угодно. Это может быть * ваше приложение, но ваше приложение является ** гостем ** на * моем * компьютере. –

1

Лучшее, что вы можете сделать это настроить браузер клиента, чтобы спросить, нужно ли перезаписывать или нет, например, в Firefox это: enter image description here

Для мои знания, требующие перезаписать, - это поведение по умолчанию в Opera.

+0

Вы не можете заставить клиента сделать это с сервлета :) –

+0

ok кажется, что я пропустил _change this code_ part ... –

+0

Спасибо, Олег. Я делаю это именно так, проблема в том, что это влияет на все остальные загрузки. Поэтому я думал, что это можно сделать на сервлете :) – gaffcz

0

Прежде чем писать, проверьте, существует ли данный файл или нет? с использованием файла api file.exists(), если он существует, удалить данный файл с помощью файла api file.delete() и продолжить процесс записи

+1

Они будут вызываться на сервере JVM. и файл будет на клиентской машине –

Смежные вопросы