Я написал программу для загрузки и выгрузки файлов (.doc, .xls и .txt) из БД (mySQL). Он написан с использованием Spring MVC. Выгрузка и загрузка работает правильно в IE, однако в Firefox это не работает как исключение.
Для загрузки файла в JSP предоставляется ссылка, при нажатии которой появляется диалоговое окно «Загрузка файла». В IE это диалоговое окно появляется и позволяет открывать и / или сохранять файл в правильном формате (т.е. .doc, .xls и / или .txt).
В Firefox при нажатии на ссылку делает следующее:
- Для файлов .doc открывает файлы (без всплывающего окна «Загрузка файла»)
- Для файлов .xls отображается всплывающее окно «Загрузка файла», однако расширение файла не принимается как .xls, а принимается как file.do
Класс FileController
public class FileController extends AbstractFormController{
SearchResultService searchResultService;
public void setSearchResultService(SearchResultService searchResultService){
this.searchResultService = searchResultService;
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
ResultSet result = searchResultService.getAttachment(Integer.parseInt(arg0.getParameter("prbId")));
byte[] buff = new byte[100000];
try {
result.next();
if(!(result.getBinaryStream(1)==null)){
String filename = "fname."+result.getString("file_ext");
if(result.getString("file_ext").equals("txt")){
InputStream is = result.getBinaryStream(1);
OutputStream out = arg1.getOutputStream();
arg1.reset();
int bytesRead;
while ((bytesRead = is.read(buff)) != -1) {
out.write(buff, 0, bytesRead);
}
arg1.setContentType("");
arg1.setHeader("content-disposition", "attachment; filename="+filename);
is.close();
out.flush();
out.close();
}else{
arg1.reset();
if(result.getString("file_ext").equals("doc")||result.getString("file_ext").equals("docx")){
arg1.setContentType("application/msword");
}else if(result.getString("file_ext").equals("xls")||result.getString("file_ext").equals("xlsx")){
arg1.setContentType("application/vnd.ms-excel");
}else if(result.getString("file_ext").equals("pdf")){
arg1.setContentType("application/pdf");
}
arg1.setHeader("Content-Desposition","attachment; filename="+filename);
byte[] bytesGot = result.getBytes(1);
ServletOutputStream outs = arg1.getOutputStream();
outs.write(bytesGot);
outs.flush();
outs.close();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return new ModelAndView();
}
}
JSP, которая вызывает класс FileController
<a href="<%=contextPath%>/file.do?prbId=<%=desc.getProblemId() %>">Download File</a>
Все расширения сохраняются / извлекаются в БД правильно. Пожалуйста, помогите.