2016-01-25 2 views
0

В настоящее время у меня есть рабочий код, который отправляет файл excel клиенту. Единственная проблема заключается в том, что, как только клиент получает файл, он автоматически открывается. Я использую org.apache для своей книги. Ans вот мой код ..Grails: Как отправить закрытую книгу в клиенте?

private void generateErrorReport(ServletResponse response, Map message, MultipartFile file, String ext){ 
     InputStream is = file.getInputStream(); 
     OutputStream os = response.outputStream; 

     int index = file.originalFilename.lastIndexOf("."); 
     String fileName = file.originalFilename.substring(0,index) + "_error." + ext 

     response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
     response.setHeader("Content-Disposition", "Attachment;Filename=${fileName}"); 
     try { 

      PoiTransformer transformer = PoiTransformer.createTransformer(is, os); 
      org.apache.poi.ss.usermodel.Workbook workbook = transformer.getWorkbook() 
      Sheet sheet = workbook.getSheetAt(workbook.getActiveSheetIndex()) 
      int lastColNum = sheet.getRow(0).getLastCellNum() 

      Cell cell; 

      cell = sheet.getRow(0).getCell(lastColNum); 
      if(cell==null){ 
       cell = sheet.getRow(0).createCell(lastColNum); 
      } 
      cell.setCellType(1) 
      cell.setCellValue("Message") 
      cell.setCellStyle(getStyle(workbook, 2)) 

      for(int it=1; it<sheet.getLastRowNum(); it++) { 
       if (message.get(new Long(it))!=null && message.get(new Long(it))!=[]) { 
        cell = sheet.getRow(it).getCell(lastColNum); 
        if(cell==null){ 
         cell = sheet.getRow(it).createCell(lastColNum); 
        } 
        cell.setCellType(1) 
        cell.setCellValue(message.get(new Long(it)).join(', ')) 
        cell.setCellStyle(getStyle(workbook, 1)) 
       } 
      } 

      sheet.autoSizeColumn(lastColNum); 
      transformer.write(); 
     } catch (IOException ex) { 
      println ex; 
     } finally { 
      closeStream(is); 
      closeStream(os); 
     } 

    } 

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

ответ

0

В соответствии с этим RFC (http://tools.ietf.org/html/rfc6266#section-4.1) браузер должен открыть диалоговое окно «сохранить файл» и позволить пользователю выбирать, где сохранить файл.

Мой совет - открыть инструменты dev (F12, Cmd Alt I) в сети и посмотреть, какие заголовки отправляются клиенту при запросе файла excel.

Другие вещи, которые вы можете рассмотреть следующие вопросы:

  • установить тип MIME (response.setContentType) для application/vnd.ms-excel
  • установить тип пантомимы application/octet-stream. Таким образом, вы сообщаете браузеру, что данные двоичные и ничего больше.
+0

Я попытался установить MimeType на применение/vnd.ms-Excel, а также приложения/октет потока, но он не работал :( – user3714598

+0

Какой браузер вы используете? Надеюсь, что это не IE6 :-) ли вам есть изменения, чтобы проверять заголовки в браузере (используя инструменты для разработчиков)? – defectus

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