hibernate - 从我的 Grails 应用程序访问本地存储的文件?

标签 hibernate grails groovy

我需要让我的 grails 应用程序访问本地存储的 pdf 文件以供引用。我有本地服务器上某个位置的绝对路径,并且该应用程序将在同一网络上运行。

我不确定让用户将文件名输入文本字段(可能会出现用户错误)然后将其存储在数据库中是否更好,然后我可以创建一个链接将其附加到路径中如:

<a href="${resource(dir:'/serverName/locationName/pdfs',file:'FILENAME_with_Ext.pdf')}" target="_new">pdfFile</a>

但这似乎不起作用,因为它找不到该文件,并且我收到 404 错误

我在想的另一件事是,如果有文件的话,让用户上传文件可能会更容易,因为可能并不总是有文件。我认为这可能是更好的方法,但我不知道将文件存储在哪里。我可以在 Web 应用程序目录中创建一个文件夹并将所有文件存储在其中吗?

感谢您给我的任何意见。

最佳答案

资源指令是相对于网络应用程序根目录的,所以我认为它无法访问除此之外的任何内容。

我不确定你所说的可能并不总是有服务器是什么意思 - 总是有一个运行应用程序的服务器。如果你指的是数据库服务器,我想这在技术上是正确的,尽管你至少总是可以使用 H2 或其他一些内存数据库。

docs关于文件上传有一个很好的部分。您可以按照此操作并将文件保存到您有权访问的任何目录 - 映射的、网络的或本地的。可能最好在网络应用程序之外执行此操作,这样您在重新部署时就不会覆盖。保存文件名以及您需要向用户展示的任何描述。

然后要访问,您可能需要在 Web 服务器(tomcat 等)中设置某种别名。假设您将文档存储在 /var/myWebApp/uploads 中,然后使用 Web 服务器设置创建一个别名,以便 /uploads/ 指向 /var/myWebApp/uploads 并将它们提供为 http://www.myserver.com/uploads/uploaded.pdf

我不知道您对此网站有什么安全顾虑,但如果您担心人们查看上传目录,并且不允许该目录将自身显示为索引,您可能需要混淆文件名并列出它包含的文件。

编辑

非常基本的示例

//class
class MyClass {
    String fileDescription
    byte[] fileDocument
}

//form
<g:uploadForm action="save">
    Description <g:textField name="fileDescription" />
    <input type="file" name="fileDocument" />
    <input type="submit" 
</g:uploadForm>

//controller
def save = {
    def myClass = new MyClass(params)
    myClass.save()
}

关于hibernate - 从我的 Grails 应用程序访问本地存储的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10728697/

相关文章:

java - -XX :MaxPermSize=128m: command not found when setting MaxPermSize on linux server

java - 如何在 Spring Data JPA @Modifying @Query 查询中更新 JPA/Hibernate @Version 字段?

java - 读取 Hibernate 实体标识值

grails - 如何在 Grails 集成测试中部分模拟服务

grails - Grails域类可以在每个查询中包含自定义条件吗?

grails - Grails XML转换器-编写CDATA

bash - sh -c : Unterminated quoted string error in groovy call

grails - 用于Grails的JasperReports插件:获取 “No such report spec”异常

grails - [method] 操作接受类型为 [org...JSONObject] 的参数,该参数未使用 @Validateable 标记。

java - Spring Boot应用程序无法启动嵌入式容器