0

Как заставить браузер скачать файл?

1

Я сталкиваюсь с проблемой при попытке заставить браузер скачать большие файлы. Все работает хорошо для небольших файлов, примерно до 1MB, но когда я пробую отправить файлы размером около 20MB, браузер начинает их отображать вместо того, чтобы предложить скачать. Я перепробовал множество заголовков, и вот мой текущий код:

PrintWriter out = response.getWriter();
String fileName = request.getParameter("filename");

File f = new File(fileName);

InputStream in = new FileInputStream(f);
BufferedInputStream bin = new BufferedInputStream(in);
DataInputStream din = new DataInputStream(bin);

while (din.available() > 0) {
    out.print(din.readLine());
    out.print("\n");
}

response.setContentType("application/force-download");
response.setContentLength((int) f.length());
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition", "attachment; filename=\"" + "xxx\""); // fileName);

in.close();
bin.close();
din.close();

Как я могу заставить браузер принудительно загрузить большие файлы, а не отображать их?

2 ответ(ов)

0

Установите заголовок Content-Type и другие заголовки перед тем, как вы начнете записывать файл. Для небольших файлов содержимое кэшируется, и браузер сначала получает заголовки. Для больших файлов данные передаются первыми.

0

Это фрагмент PHP-скрипта, который корректно решает проблему во всех браузерах, которые я тестировал (Firefox начиная с 3.5, IE8+, Chrome):

header("Content-Disposition: attachment; filename=\"".$fname_local."\"");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($fname));

На основании этого, могу сказать, что вы делаете все правильно. Проверяли ли вы настройки вашего браузера?

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь