2016-10-17 5 views
0

Webサービスから返された:設定メッセージは、(私はダウンロード用URLを提供)私は電子メールからのファイルのダウンロードのために、このWebサービスを持っている

@Override 
@PreAuthorize("hasRole('ROLE_ADMIN')") 
@RequestMapping(value = { "download"}, method = RequestMethod.GET) 
public void downloadFile(HttpServletResponse response, @RequestParam(value="filePath", required = true) String filePath) { 
    try{ 
     File file = new File(filePath); 
     if (file.isFile()){ 
      try(InputStream is = new FileInputStream(file.getAbsolutePath())){ 
       setResponse(response, is, file, "attachment; filename="); 
      }catch (Exception e1){ 
       ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e1); 
       LOG.error("Threw exception in FleetAndCarControllerImpl::downloadStatisticalFile :" + errorResponse.getStacktrace()); 
      } 
     }else{ 
      //TODO write that file is not present 
     } 
    }catch (Exception e) { 
     ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e); 
     LOG.error("Threw exception in FleetAndCarControllerImpl::downloadStatisticalFile :" + errorResponse.getStacktrace()); 
    } 
} 

とはsetResponse方法:

private void setResponse(HttpServletResponse response, InputStream is, File file, String useOfFile) throws Exception{ 
     response.setHeader("Expires", "0"); 
     response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0"); 
     response.setContentType(Files.probeContentType(file.toPath())); 
     response.setHeader("Content-Description"," File Transfer"); 
     response.setHeader("Content-Disposition", useOfFile + file.getName()); 
     response.setHeader("Content-Transfer-Encoding"," binary"); 
     long size = Utils.stream(is, response.getOutputStream()); 
     response.addHeader("Content-Length", Long.toString(size)); 
     response.flushBuffer(); 
    } 

ファイルが存在するときはうまく動作しますが、ファイルが存在しない場合はユーザーが空白のページを表示し、何が起こっているのかわからないため、メッセージを書きたいと思います。 私を助けることができますか?

答えて

1

あなたのような何かを行うことができます:

response.sendError(HttpServletResponse.SC_NOT_FOUND, "File was not found"); 

またはそれ以上の次の何をすべきかのエラーメッセージ/説明のページへのリダイレクトを送信します。

+0

私は試したことがあり、それは動作します。ありがとう。リダイレクトの場合、私はresponse.sendRedirectを使うべきでしょうか? – luca

+0

右のHttpServletResponseのjavadocを参照してください。http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletResponse.html – borowis

関連する問題