目前我正在使用导出插件在服务器上动态创建一个excel文件,然后通过response.outputstream将其发送到浏览器(由导出插件完成)。相反,我想要它创建excel文件,一旦完成,通过电子邮件发送给用户。假设我有电子邮件可以有人给我看一些示例代码吗?
我查看了导出插件代码,它看起来像是写入响应输出流。我可以以某种方式读取此输出流,创建一个文件,而不是将其存储到光盘,而只是通过电子邮件发送它?
答案 0 :(得分: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作为附件轻松发送电子邮件。
答案 1 :(得分:2)
您想在Grails Mail DSL中使用attach(String fileName, String contentType, InputStreamSource source)
方法。这使您可以在内存中执行所有操作而无需将文件写入光盘。
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 "someone@org.com"
attach "yourfile.txt", "text/plain", inputStream
}
更多信息here。
希望有所帮助!