Невозможно загрузить файл в Spring MVC - PullRequest
0 голосов
/ 10 мая 2018

Мой контроллер, которому сопоставлен запрос -

Я возвращаю значение из AJAX, в контроллер -


$.ajax({
        type: 'GET',
        dataType: 'json',
        contentType:"application/json",
        url:"/Putty/downloadProcess/?param="+param          
    });

@RequestMapping(value = "/downloadProcess", method = RequestMethod.GET)
    protected void download(@RequestParam("param") String value, HttpServletResponse response)
            throws ServletException, IOException {

        Properties prop = new Properties();
        InputStream input = new FileInputStream("config.properties");;
        prop.load(input);

        System.out.println(value);
        String path = prop.getProperty("path.MS1");
        String filepath= path.concat(value);
        System.out.println(filepath);

        File downloadFile = new File(filepath);
        FileInputStream inStream = new FileInputStream(downloadFile);


        String mimeType = "application/octet-stream";
        System.out.println("MIME type: " + mimeType);

        // modifies response
        response.setContentType(mimeType);
        response.setContentLength((int) downloadFile.length());

        // forces download
        String headerKey = "Content-Disposition";
        String headerValue = String.format("attachment; filename=\"%s\"", downloadFile);
        response.setHeader(headerKey, headerValue);

        System.out.println(response);
        // obtains response's output stream
        OutputStream outStream = response.getOutputStream();

        byte[] buffer = new byte[4096];
        int bytesRead = -1;

        while ((bytesRead = inStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, bytesRead);
        }

        inStream.close();
        outStream.close();

Это отображает имена файлов на моем JSP


<c:forEach var="listValue" items="${files}">
        <label onClick="download('${listValue}')">${listValue}</label>
        <br>
    </c:forEach>

Проблема в том, что я могу видеть MIME-тип на своей консоли вместе со значением, возвращаемым AJAX- Имя файла.Но у меня не открывается диалоговое окно «Загрузка», когда я нажимаю на имена файлов, отображаемые на моем JSP.Я не обрабатываю запросы должным образом или мне не хватает чего-то еще.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Диалог открытия / сохранения появляется по умолчанию, поэтому мы не можем ничего форсировать. Это настройки браузера, которые нельзя изменить на стороне клиента.

Для примера Mozilla Firefox: Using Mozilla Firefox browser you will get this popup

0 голосов
/ 10 мая 2018

Попробуйте

ServletOutputStream out = response.getOutputStream();
response.setContentType("application/octet-stream");

   if (file.isFile())
   {
        response.setHeader("Content-Disposition", "attachment;filename=\"" + downloadFile.getName() + "\"");
        try (FileInputStream inputStream = new FileInputStream(downloadFile ))
        {
            IOUtils.copy(inputStream, out);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...