Установить сообщение в файл загрузить пустую страницу, возвращенную из веб-службы

#java #rest #servlets #download

#java #остальное #сервлеты #Скачать

Вопрос:

У меня есть этот веб-сервис для загрузки файлов с электронной почты (я предоставляю URL для загрузки):

 @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");
 

Или лучше отправить перенаправление на страницу с сообщением об ошибке / объяснениями, что делать дальше.

Комментарии:

1. Я пробовал, и это работает. Спасибо. Для перенаправления я должен использовать response.sendRedirect правильно?

2. правильно, смотрите javadocs для ответа HttpServletResponse: docs.oracle.com/javaee/7/api/javax/servlet/http /…