Скачать файл Excel в браузере, используя Java - PullRequest
0 голосов
/ 28 мая 2018

Я видел этот вопрос очень много мест, но все еще не смог решить мое требование.

Я написал код для генерации таблицы результатов в Apache POI в ADF, используя Java, и мне нужно загрузить его в браузер как приложениебудет на стороне сервера, не всегда на моей локальной машине.

Сначала я попробовал код:

Desktop.getDesktop().open(new File(home + "/Downloads/" + "excel1" + filename + ".xls"));

Это было скачивание.Но это загрузка только на моей машине.Не загружается на другой компьютер.

Другое решение:

file = new File(home + "/Downloads/" + "excel" + filename + ".xls");
Runtime.getRuntime().exec("cmd.exe /C start " + file);

Но оно не работает ..

Другое решение:

FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
response.reset();
response.setContentType(“application/vnd.ms-excel”);
response.setHeader(“Content-Disposition”, “attachment; filename=\"excel.xlsx");
workbook.write(response.getOutputStream());
fc.responseComplete();

Но это решение также не работает.

Ответы [ 2 ]

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

Более «профессиональным» решением является использование Excel Api для Java, как Apache POI или JXL.

Вот пример использования JXL:

https://www.java -tips.org / other-api-tips-100035/93-jexcel / 418-how-do-i-output-an-excel-file-from-a-servlet.html

А вот еще один пример использования Apache POI:

https://programtalk.com/java/download-excel-using-servlet/

Я надеюсь, что это можетпомогает вам.С наилучшими пожеланиями!

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

У меня есть предложение попытаться решить вашу проблему.

Обычно я создаю сервлет, который отвечает за загрузку файлов в различных форматах: xls, pdf ...

Вотпример того, как это можно сделать:

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String fileName = request.getParameter("fileName");
        String contentType = null;

        if (fileName.endsWith("xls")) {
            contentType = "application/octet-stream";
        } else if (fileName.endsWith("pdf")) {
            contentType = "application/pdf";
        } else {
            throw new RuntimeException("File type not found");
        }

        byte[] file = getFileOnServer(fileName);

        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.setHeader("charset", "iso-8859-1");
        response.setContentType(contentType);
        response.setContentLength(file.length);
        response.setStatus(HttpServletResponse.SC_OK);

        OutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            outputStream.write(file, 0, file.length);
            outputStream.flush();
            outputStream.close();
            response.flushBuffer();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    private byte[] getFileOnServer(String fileName) {
        //implement your method to get the file in byte[]
        return null;
    }

}

Итак, вы можете вызвать свой сервлет по URL:

http://localhost:8080/downloadServlet?fileName=myExcel.xls

или по форме:

<form id="myDownloadServlet" action="downloadServlet" method="post">
    <input type="text" id="fileName" name="fileName" />
    <input type="submit" id="btnDownload" name="btnDownload" value="Download File" />
</form>

Донне забудьте настроить свой web.xml или использовать аннотацию @ WebServlet.

Надеюсь, я помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...