2013-07-30 3 views
1

Я использовал код Java для загрузки файла с сервера, и после того, как файл загружен, файл удаляется с сервера. Общий размер файла - 200 гб. загрузка начинается и показывает успешную загрузку. когда я проверяю размер загруженного файла только 3,3 gb. а также файл не удаляется. Я проверил журналы ошибок, но нет журнала. вот мой код.загрузка не удалась после 3gb

byte b[] = new byte[2048]; 

int len = 0; 
filein = new BufferedInputStream(new FileInputStream(file)); 
output = new BufferedOutputStream(response.getOutputStream()); 
response.setContentType("application/force-download"); 
response.setHeader("content-Disposition", "attachment; filename=" + fname); // downloaded file name 
response.setHeader("content-Transfer-Encoding", "binary"); 
while ((len = filein.read(b)) > 0) { 
    output.write(b, 0, len); 

    output.flush(); 
} 
output.close(); 
filein.close(); 
file.delete(); // delete file 

пожалуйста, предложить то, что я не хватает ..

+0

Вы должны шутить. 200 гигабайт? Я не знаю интернет-сервиса, который позволяет загружать более 150 ГБ в месяц. – tbodt

+0

Мне кажется, что плохая идея удалить файл, не проверяя, была ли загрузка успешной. – Dahaka

+0

@ Дахака в соответствии с кодом файл должен быть удален после успешной загрузки, но он не удаляется. – anonymous

ответ

1

Я думаю, что ваш сервер убивает загрузку (конец ответ) после того, как ответ начинает принимать слишком много размера в памяти. Убедитесь, что проблема с доступной памятью. В Linux есть демон, который просто убьет процессы с использованием большого количества элементов, если все начнет критически.

Если сервер внезапно завершает ответ, возможно, клиент (браузер) все еще считает, что загрузка является успешной. Это также объясняет, почему файл не удаляется, если это исключение, которое бросается.

Я бы обернул цикл while в попытке {..} catch (Throwable t) // поймал все исключения и ошибки и посмотрел, что произойдет.

+0

+1 У вас есть сказал * точно * то же самое, что я планировал написать после обеденного перерыва :) поймать Throwable (наблюдать за демонами) и [проверить память] (http://stackoverflow.com/a/25596/1654265); Я бы добавил [также проверку ограничений файловой системы] (http://www.sunsolarisadmin.com/general/ufs-maximum-file-size-2gb-restriction-in-sun-solaris/), на Solaris есть много разных способов для этого –

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