Загрузка файла, используя Яву, Распорки 2 и AJAX

Я хочу дать загрузку файла, используя Яву, struts2 и ajax.

На моей странице HTML есть кнопка, названная «экспортным» нажатием, какой звонок ajax будет сделан, который выполнит вопрос и создаст .xls файл, используя код, и я хочу дать тот файл для загрузки пользователю, не храня его на жестком диске.

Кто-либо знает, как сделать то использование struts2 и ajax на Яве?

Действительно ли там какой-либо пример доступен?

Сообщите мне, нужно ли Вам больше деталей от меня...

Спасибо.

amar4kintu

9
задан ZoogieZork 23 January 2010 в 09:16
поделиться

3 ответа

В этом случае не обязательно использовать AJAX. Просто попросите кнопку отправить форму в ваше действие Struts, и пусть действие использует тип -результат потока.

Пример:

В вашем действии Struts XML:

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

Ваше действие предоставит публичный InputStream getInputStream() для передачи данных.

Я предполагаю, что любая библиотека, которую вы используете для генерации Excel файлов (POI?) может записать вывод в произвольный OutputStream.

Быстрый и грязный способ преобразовать это в InputStream:

// Using Workbook from Apache POI for example...
Workbook wb;
// ...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
wb.write(bos);
InputStream bis = new ByteArrayInputStream(bos.toByteArray());
11
ответ дан 4 December 2019 в 13:47
поделиться

атлас, я смог решить его следующим образом... Я написал следующую строку в своей функции класса действия и смог скачать файл с именем report.xls вместо ExportReport.action. Почему я точно не знаю?

response.setHeader("Content-Disposition","attachment;filename=rpt.xls"); 

Следующее находится в моем файле struts.xml. Я удалил из него параметр , потому что он не работал из файла struts.xml, и поместил его в свой Java-файл, как описано выше.

<result name="success"  type="stream" >
    <param name="inputName">fileStream</param>
    <param name="contentType">application/vnd.ms-excel</param>
    <param name="bufferSize">1024</param>
</result>

Надеюсь, это кому-нибудь поможет.

Спасибо.

amar4kintu

0
ответ дан 4 December 2019 в 13:47
поделиться

Я бы использовал такую ​​аннотацию для класса Action:

@Result(name = "success", type= StreamResult.class,
          params = {"contentType", "application/vnd.ms-excel",
                    "contentDisposition", "attachment; filename=report.xls"},
          value = "reportFileStream"
)
0
ответ дан 4 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: