2015-04-08 4 views
0

Я работаю над созданием серии кнопок, которые загружают, загружают и удаляют файлы в Spring MVC, с страницами JSP и Java в последние несколько дней. Я отлично работаю над загрузкой и удалением, и я просто загрузил загрузку. Я подчеркиваю, потому что загрузка имеет очень странное состояние.Загрузка файлов в браузер

Если я загружу, скажите exe или файл jar, а затем вернитесь и попробуйте загрузить его. Появится окно с вопросом, хочу ли я открыть его или сохранить. Если я хочу сделать это, это не испорчено или что-то еще, все в порядке.

Если, однако, файл является текстовым, как в формате PDF, TXT, .doc, даже XML, откроется вкладка браузера, и он появится там.

Так может ли кто-нибудь указать мне в направлении, как я могу это исправить?

Первый блок кода - это мой метод контроллера, второй - строка в моей jsp, которая запускает кнопку.

@RequestMapping("/FileDownload") 
public ModelAndView FileDownload(
     @RequestParam(value = "FileID", required = false) int fileID, 
     @RequestParam(value = "theFile", required = false) MultipartFile thefile, 
     @ModelAttribute("fileAttachment") @Valid fileAttachment, BindingResult result, HttpServletResponse response){ 
     ModelAndView mav = new ModelAndView(); 

     fileAttachment doc = attachmentService.getFileAttachment(fileID); 
     try { 
     response.setHeader("Content- Disposition", "inline;filename=\"" 
        + doc.getFileName() + "\""); 
     OutputStream out = response.getOutputStream(); 
     response.setContentType(doc.getFileType()); 
     FileCopyUtils.copy(doc.getFileContent(), response.getOutputStream()); 
     out.flush(); 
     out.close(); 

     } catch (IOException e) { 
     e.printStackTrace(); 

Вот строка, которая конфигурирует кнопку в СПЯ

  <button name="FileDownloadd" type="button" value="Download" onClick="location.href=FileDownload.html?FileID=${fileattach.FileID}'">Download</button> </td> 
+0

'' Content-Disposition "' Почему у вас есть пробел в заголовке содержимого? – Kenster

+0

вы говорите браузеру, чтобы отобразить его 'inline'. Это означает, что если браузер знает, как отображать содержимое файла, он будет. text/pdf/xml может отображаться непосредственно браузером (или, по крайней мере, через плагин). Если вы хотите принудительно загрузить, используйте «вложение» в качестве своего расположения и/или принудительно введите mime-тип, например 'application/octet-stream', который браузер НЕ будет пытаться отображать. –

+0

Я не думаю, что там были пробелы, я думаю, что это произошло, когда я наклеил его. Тестирование комментария Марка. –

ответ

0

комментарий Марка, выше был ответ. Поскольку это был комментарий, и я хочу закрыть это. Я отправлю его в кавычки.

вы говорите браузеру, чтобы отображать его в строке. Это означает, что если браузер> знает, как отображать содержимое файла, он будет. text/pdf/xml может отображаться непосредственно браузером (или, по крайней мере, через плагин). Если вы хотите принудительно загрузить> скачать, используйте вложение в качестве своего расположения и/или принудительно создайте тип mime-типа> как приложение/октет-поток, который браузер НЕ будет пытаться отображать.

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