Grails在部署战争时无法找到pdf资源

时间:2013-09-19 11:01:12

标签: file grails web-applications path

我正在控制器中编写一个动作,从webapp目录下载pdf。当我使用run-app命令运行应用程序时,它完全正常。但是当我创建一个战争时,它会抛出在浏览器上找不到File的错误。我的代码如下。

 def pdfDownlod ={
      def pdfFileName=params.pdfFileName
      def pdfFile = new File('web-app/sales/resources/pdf/'+pdfFileName)
      response.setContentType("application/pdf")
      response.setHeader("Content-disposition", "attachment; filename=${pdfFileName}")
      response.outputStream << pdfFile?.getBytes()
      response.outputStream.flush()
      return
  }

请让我知道问题和解决方案的根本原因。

提前致谢。

2 个答案:

答案 0 :(得分:2)

你可以尝试这种语法,它可以很适合你。

def pdfFile = new File(ServletContextHolder.servletContext.getRealPath('sales/resources/pdf/'+pdfFileName))

享受。

答案 1 :(得分:1)

那是因为在部署的战争中,web-app文件夹不存在。要在dev和prod中正确获取资源,请使用grailsResourceLocator bean。

示例:

class MyController {

def grailsResourceLocator

  def pdfDownlod ={
      def pdfFileName = params.pdfFileName
      final Resource pdfFile = grailsResourceLocator.findResourceForURI('web-app/sales/resources/pdf/'+pdfFileName)

      response.setContentType("application/pdf")
      response.setHeader("Content-disposition", "attachment; filename=${pdfFileName}")
      response.outputStream << pdfFile?.file.bytes // << already flushes!
      return
  }
}