Как я могу заставить пользователя загрузить мой файл?(Java, MVC, Excel, POI) - PullRequest
1 голос
/ 29 января 2011

Я использую Struts2, Spring и Hibernate.

Я написал простой файл Excel под названием test.xls с POI. Когда я запускаю действие, оно работает, потому что появляется test.xls, но в моей папке tomcat.

Я хочу, чтобы этот файл был загружен на моей странице JSP. Как мне заставить пользователя загрузить файл .xls? Скорее, как я называю этот путь?

Извините, если ответ очевиден, я новичок в этом. Я знаю, что это, вероятно, связано с ServletContext или HttpServletRequest?

[править] Я заработал, благодаря приведенным ниже ответам. Вот рабочий код:

private InputStream excelStream;

public String export(){
//Create excelfile
    HSSFWorkbook workbook = new HSSFWorkbook();
    FileOutputStream file = null;

    try{
         file = new FileOutputStream("poi-test.xls"); 
    }
    catch(IOException e){
        e.printStackTrace();
    }       
//Populate workbook with all the excel stuff
    ...

//Write to file
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try{
        workbook.write(file);
        workbook.write(baos);
        ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray()); 
        excelStream = bis;
    }
    catch(IOException e){
        e.printStackTrace();
    }
    return "excel";
}

public InputStream getExcelStream() {
    return excelStream;
}


public void setExcelStream(InputStream excelStream) {
    this.excelStream = excelStream;
}

В моем файле распорок:

        <result name="excel" type="stream">
            <param name="contentType">application/vnd.ms-excel</param>
            <param name="inputName">excelStream</param>
            <param name="contentDisposition">attachment; filename="excelExport.xls"</param>
            <param name="bufferSize">1024</param>
        </result>

Ответы [ 2 ]

1 голос
/ 29 января 2011

Если вновь созданный файл Excel доступен с веб-сервера, почему бы просто не указать эту ссылку HTTP на файл Excel на странице JSP? Если вы не хотите передавать файл Excel динамически, а не физически, как вы это делаете в настоящее время, это, вероятно, самое простое решение.

1 голос
/ 29 января 2011

Для этого вы хотите использовать Результат потока Struts2. Вот некоторая информация об этом:

...