【问题标题】:File storage for Java based web application基于 Java 的 Web 应用程序的文件存储
【发布时间】:2023-03-15 22:45:01
【问题描述】:

我正在设计一个基于 Java 的 Web 应用程序(具体来说是基于 Spring)。关键要求之一是,此应用程序必须接受用户上传的各种格式(pdf、jpeg、dwg、png 等)的许多文件。此外,能够下载回用户的本地计算机。将有数千个文件被上传/下载。

我正在考虑两种方法:

  1. 将文档上传到服务器运行所在的同一框。大多数情况下,所有文档都将上传到运行 Tomcat 的盒子,并从盒子下载。我担心随着文档数量的增加,这可能会影响整体性能。

  2. 将文档上传/下载到另一台专门用于存储/检索文档的服务器。

如果采用第二种方法,Spring 应用程序如何向远程服务器上传/下载文件?或者在类似的应用程序中使用了哪种方法。

或者您能否建议任何其他最佳方式来处理此要求。

提前致谢。 象头神

【问题讨论】:

  • “我担心随着文档数量的增加,这可能会影响整体性能。”

标签: java spring upload document


【解决方案1】:

许多像这样构建的现代应用程序将使用像 Amazon S3 这样的外部存储系统来存储这些文件,这为您带来了各种不错的功能 - 下载的高可用性、有效的无限磁盘空间池、数据复制、等等。

There's a tutorial available for integrating spring with Amazon S3。你应该检查一下。无论您选择 S3 还是其他方式,方法都是相似的。

【讨论】:

    【解决方案2】:

    您是否考虑过使用数据库。您可以将这些文件存储为 BLOB。这是一个教程:link

    “本教程将引导您完成构建有趣的 Spring MVC Web 应用程序的步骤,该应用程序允许用户将文件从她的计算机上传到服务器。文件使用 Hibernate 存储在数据库中。”

    至于您考虑的两种方法:

    无论哪种方式,您都必须管理这些文件,备份它们并检查是否有足够的空间来存储更多文件。此外,当您接受所有文件时,这可能会导致一些安全问题。

    【讨论】:

      【解决方案3】:

      我建议您使用 JCR,例如 Apache Sling 或 Apache Jackrabbit。

      Apache Sling™ 是一个基于可扩展内容树的 RESTful Web 应用程序框架,具有以下特性:

      • 将请求 URL 映射到内容存储库中的内容节点的内容解析
      • 将内容节点和请求方法映射到处理请求的 Servlet 的 Servlet 解析
      • 支持 WebDAV、从 Web 表单和 JSON 表示创建内容的默认 servlet
      • 一个 Javascript 客户端库,允许通过 AJAX 访问内容存储库
      • 支持使用 Javascript、JSP、Ruby、Velocity 和 Scala 编写服务器端脚本
      • 通过 Apache Felix 实现基于 OSGi 的可扩展性 - Felix Web 控制台最初由 Apache Sling 项目开发

      【讨论】:

        猜你喜欢
        • 2015-09-08
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 2011-02-27
        相关资源
        最近更新 更多