2016-10-03 22 views
5

Używam tego kodu Java do pobierania plików z aplikacji internetowej:Wiosna OutputStream - pobieranie pptx z IE

@RequestMapping(value = "/filedownloads/filedownload/{userid}/{projectid}/{documentfileid}/{version}/", method = RequestMethod.GET) 
public void filesDownload(final @PathVariable("userid") String userId, final @PathVariable("projectid") String projectId, 
     final @PathVariable("documentfileid") String documentFileId, final @PathVariable("version") String version, 
     final HttpServletResponse response) throws IOException, BusinessException { 

    ... 

    final String fileName = "filename=" + documentFile.getFileName(); 
    final InputStream is = new FileInputStream(filePath); 
    response.setHeader("Content-Disposition", "inline; " + fileName); 
    IOUtils.copy(is, response.getOutputStream()); 
    response.flushBuffer(); 
} 

jeśli będę pobrać pptx- plik pojawia się następujący IE- strony:

opend pptx in IE

Co chcę zrobić, to otworzyć pobrany plik w programie Powerpoint. Moje pytanie teraz byłoby, gdyby nie to ustawienie, aby otworzyć ten plik za pomocą odpowiedniej aplikacji nagłówka (w tym przypadku PowerPoint)

Odpowiedz

2

Wystarczy spróbować ustawić nagłówek Content Type właściwie co jest application/vnd.openxmlformats-officedocument.presentationml.presentation w przypadku pptx, jak obok :

response.setContentType(
    "application/vnd.openxmlformats-officedocument.presentationml.presentation" 
); 
response.setHeader(
    "Content-Disposition", 
    String.format("inline; filename=\"%s\"", documentFile.getFileName()) 
); 
response.setContentLength((int) new File(filePath).length()); 

Here is the list of mime types corresponding to Office 2007 documents.

1

Oto mała próbka kodu z Spring MVC Controller:

@RequestMapping("/ppt") 
public void downloadPpt(HttpServletRequest request, HttpServletResponse response) throws IOException { 
    Resource resource = new ClassPathResource("Presentation1.pptx"); 

    InputStream resourceInputStream = resource.getInputStream(); 
    response.setHeader("Content-Disposition", "attachment; filename=\"Presentation1.pptx\""); 
    response.setContentLengthLong(resource.contentLength()); 

    byte[] buffer = new byte[1024]; 
    int len; 
    while ((len = resourceInputStream.read(buffer)) != -1) { 
     response.getOutputStream().write(buffer, 0, len); 
    } 

} 

Po ustawieniu Content-Disposition na attachment, mówisz przeglądarce, aby pobrać ten plik jako załącznik i podając poprawną nazwę pliku z rozszerzeniem, mówisz systemowi operacyjnemu, aby używał dowolnej aplikacji, z której zwykle korzysta użytkownik do otwarcia plik tego typu. W tym przypadku będzie to MS Power Point.

W ten sposób można uniknąć niewiedzy, z której wersji programu Power Point został utworzony plik.

0

Mam przetestowany kod w IE-11 jego praca dobrze. Zobacz poniżej kodu I.E

@RequestMapping(value = "/downloadfile", method = RequestMethod.GET) 
    @ResponseBody 
    public void downloadfile(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     ServletOutputStream servletOutputStream = null; 

     try { 
      response.setContentType("application/octet-stream"); 
      response.setHeader("Content-Disposition", "attachment; filename=downloadppt.pptx"); 

      byte[] ppt = downloadFile(); 

      servletOutputStream = response.getOutputStream(); 
      servletOutputStream.write(ppt); 
     } catch (Exception e) { 
      throw e; 
     } finally { 
      servletOutputStream.flush(); 
      servletOutputStream.close(); 
     } 
    } 

Generowanie bytes z zapisanych pptx pliku.

public byte[] downloadFile() throws IOException { 
     InputStream inputStream = new FileInputStream(new File("e:/testppt.pptx")); 
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

     // Transfer bytes from source to destination 
     byte[] buf = new byte[1024]; 
     int len; 
     while ((len = inputStream.read(buf)) > 0) { 
      byteArrayOutputStream.write(buf, 0, len); 
     } 

     inputStream.close(); 
     byteArrayOutputStream.close(); 
     return byteArrayOutputStream.toByteArray(); 
    } 

To wszystko, możesz pobrać plik pptx. Kod nadziei ci pomoże, jeśli masz jakieś pytania lub wątpliwości, wtedy możemy dyskutować lub jeśli jakieś sugestie. Dziękujemy