Я использую сервлет для загрузки файла с сервера на компьютер. Сервлет обрабатывает MIME-тип и прочее, затем запускает диалоговое окно, что делать с файлом (открыть, сохранить, отменить). Он работает правильно при использовании в FireFox, но при использовании с IE6 мой файл загружается, но я получил новое окно с URL моего сервлета и с ошибкой 404. Я смотрю в Интернете, но не нашел ни малейшего понятия, почему.
Вот мой код, если он поможет:
public void doGet( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// envoi du fichier
BufferedInputStream bIn = null;
BufferedOutputStream bOut = null;
int bytesRead;
byte[] buffer = new byte[2048];
try {
String nomFichier = <my_filename>;
// encodage des caractères hors [a-Z, 0-9] pis transformation des espace(+) pour l'URL
String path = <my_path_to_download> + StringUtils.replace(URLEncoder.encode(nomFichier, "UTF-8"), "+", "%20");
URL url = new URL(path);
// Test si le fichier bien présent sur le serveur
if (((HttpURLConnection) url.openConnection()).getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new FileNotFoundException();
}
bIn = new BufferedInputStream(url.openStream());
String extension = StringUtils.getFilenameExtension(nomFichier).toLowerCase();
// choix du type MIME selon l'extension du fichier
if (Extensions.PDF.equals(extension)) {
res.setContentType("application/pdf");
} else if (Extensions.WORD.equals(extension)) {
res.setContentType("application/msword");
} else if (Extensions.HTM.equals(extension)) {
res.setContentType("text/htm");
} else if (Extensions.HTML.equals(extension)) {
res.setContentType("text/html");
} else {
LOGGER.error("Format de fichier non géré : " + extension);
throw new RuntimeException("Format de fichier non géré : " + extension);
}
// n'ouvre pas dans le navigateur et renseigne le nom de fichier pour "Save as..."
res.setHeader("Content-Disposition", "attachment; filename=\"" + nomFichier + "\";");
// lecture/écriture des données
bOut = new BufferedOutputStream(res.getOutputStream());
while (-1 != (bytesRead = bIn.read(buffer, 0, buffer.length))) {
bOut.write(buffer, 0, bytesRead);
}
} catch (Exception e) {
LOGGER.error("Erreur à la récupération du fichier " + nomFichier, e.getCause());
res.sendError(HttpServletResponse.SC_NOT_FOUND);
} finally {
if (bIn != null)
bIn.close();
if (bOut != null)
bOut.close();
}
}