2013-10-02 3 views
4

В настоящее время я использую плагин экспорта для создания файла excel «на лету» на сервере, а затем отправки его в браузер через response.outputstream (выполняется плагином экспорта). Вместо этого, я хочу, чтобы он создавал файл excel и как только он был сделан, отправьте его пользователю. Предполагая, что у меня есть письмо, кто-нибудь может показать мне пример кода?Файл электронной почты с помощью графического адаптера grails

Я просмотрел код плагина экспорта и, похоже, он записывает в выходной поток ответа. Могу ли я как-то читать из этого потока вывода, создавать файл, а не хранить его на диске и просто отправлять его по электронной почте?

ответ

4

Экспорт плагина также может создавать файл на сервере.

File exportOutput = new File("/home/mkb/test.csv") 
def exportOutputStream = new FileOutputStream(exportOutput) 
exportService.export('csv', exportOutputStream, User.list(), fields, labels, formatters, parameters) 

и как только вы получили файл, то вы можете легко отправить его с помощью Grails mail plugin в качестве вложения.

+3

следует пометить как правильный ответ. Метод экспорта нужен только для outupstream, он может быть от httpresponse или из файла –

+0

очень хороший ответ, я ищу это во многих местах –

2

Вы хотите использовать метод attach(String fileName, String contentType, InputStreamSource source) в DSL Grails Mail. Это позволяет делать все в памяти, не записывая файл на диск.

import org.springframework.core.io.ByteArrayResource 
... 

OutputStream outputStream = new ByteArrayOutputStream() 
exportService.export(type, outputStream, objects, fields, labels, formatters, parameters) 
InputStreamSource inputStream = new ByteArrayResource(outputStream.bytes) //copy output stream to input stream 

sendMail { 
    mutipart true 
    to "[email protected]" 
    attach "yourfile.txt", "text/plain", inputStream 
} 

Дополнительная информация here.

Надеюсь, что это поможет!

Смежные вопросы