我想在邮件(grails)中附加一个csv文件
路径中的文件已存在。我使用以下代码
sendMail {
multipart true
from "$senderName <$fromAddress>"
to toAddress
cc message.cc
subject message.subject
body content.plaintext
html content.html
attachBytes './web-app/ReadyOrdersFor-${vendor.name}','text/csv', new File('./web-app/ReadyOrdersFor-${vendor.name}').readBytes()
}
提示错误是。
java.io.FileNotFoundException:./ web-app / ReadOrdersFor-$ {fortndor.name} .cv(无此类文件或目录)
这都不会引发同样的错误
attachBytes'./web-app/ReadyOrdersFor-${vendor.name}.csv','text/csv',新文件('./ web-app / ReadyOrdersFor - $ {vendor.name}的.csv')。的ReadBytes()
答案 0 :(得分:1)
问题是您尝试将文件路径字符串用作GStringImpl,但该字符串用单引号括起来。 GStringImpl在双引号的groovy中原生支持。
你的代码应该是
attachBytes "./web-app/ReadyOrdersFor-${vendor.name}",'text/csv', new File("./web-app/ReadyOrdersFor-${vendor.name}").readBytes()
This link应该可以帮助您理解在groovy中使用单引号和双引号之间的区别。
答案 1 :(得分:0)
使用Spring ResourceLoader界面,而不是尝试使用File
获取new File(path)
引用。 ApplicationContext
实现了这个接口,所以你可以从控制器(例如)获得对它的引用,如下所示:
class MyController implements ApplicationContextAware {
private ResourceLoader resourceLoader
void setApplicationContext(ApplicationContext applicationContext) {
resourceLoader = applicationContext
}
def someAction() {
String path = "classpath:/ReadyOrdersFor-${vendor.name}"
File csvFile = resourceLoader.getResource(path).file
}
}
我不是100%确定上面的path
值是否正确,您可能需要删除'/'