2012-03-01 77 views
0

我想在邮件中附加一个csv文件(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/ReadyOrdersFor-${vendor.name}.csv(没有这样的文件或目录)

既不这个作品提示了同样的错误

attachBytes'./web-app/ReadyOrdersFor-${vendor.name}.csv','text/csv',new File('./ web-app/ReadyOrdersFor - $ {vendor.name} .csv') .readBytes()

+0

你确定这个文件存在指定路径吗? – 2012-03-01 08:55:27

回答

1

问题是,您尝试使用文件路径字符串作为GStringImpl,但字符串是用单引号括起来。 GStringImpl在Groovy中用双引号原生支持。

你的代码应该是

attachBytes "./web-app/ReadyOrdersFor-${vendor.name}",'text/csv', new File("./web-app/ReadyOrdersFor-${vendor.name}").readBytes() 

This link应该帮助您了解常规使用单引号和双引号之间的区别。

0

而不是尝试使用new File(path)得到File参考,请使用弹簧ResourceLoader接口。该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值是正确的,你可能需要删除'/'