【问题标题】:JSP: Best practices uploading files to serverJSP:将文件上传到服务器的最佳实践
【发布时间】:2012-09-19 19:26:23
【问题描述】:

我正在使用多部分表单、Apache FileUpload 等上传文件。它工作正常。

但是,我想知道在服务器中保存文件时的最佳做法或常见做法是什么,具体如下:

  • 为服务器中的文件命名(即:什么名称更好?一些 UUID 生成,或插入文件关联数据时 db 表生成的行 ID)
  • 服务器内文件的最佳位置(什么更好?即在 linux 服务器中我应该使用哪个文件夹或分区。我必须加密上传的文件吗?)
  • 当我放置一个链接以从浏览器访问文件时:直接访问更好,还是使用 servlet?

【问题讨论】:

  • 对于您的最后一个问题,如果不通过 servlet,就无法访​​问服务器上的文件。至少你需要一个默认的 servlet。
  • 大多数问题都可以用最适合您和您的架构的方法来回答。文件的加密也取决于您的需求,但即使是机密的银行文件,我也没有请求在我的公司服务器上加密文档。
  • @gigadot 您可以设置 Apache + Tomcat 安装并允许 Apache 访问应用程序的上传目录。我强烈反对,但可以这样做。
  • @f_puras 我同意它不称为servelt,但它是通过http流传递文件的apache httpd进程。无法使用 http 协议直接从 Internet 访问 OS 文件系统。

标签: java jsp file-upload upload multipartform-data


【解决方案1】:
  1. 如果您这样做(文件系统中的文件,DB 中的元数据),那么文件名的行 ID 不是一个坏主意(至少它可以确保唯一性)。不幸的是,您必须注意文件系统和数据库是否同步,因此需要仔细编码。
  2. 如果您关心性能文件可以存储在单独的 HDD(或 NAS)上。请注意,如果文件数量很大(数千个),则不应将所有文件放在一个文件夹中,而应将它们分组到子文件夹中,每个子文件夹最多包含数百个文件。如果文件数量变大,它将确保低访问时间。加密的使用应取决于您的业务需求(文件是否包含机密数据?)。
  3. Servlet 是一种更好的方法,因为它对客户端隐藏了真实的存储细节,并且它更能证明应用程序未来的变化。它还有其他一些好处(例如,您可以实现访问控制,在浏览器/代理中获得开箱即用的缓存等)。如果您使用加密,这是必须的。

【讨论】:

    【解决方案2】:

    在服务器文件系统操作反复出现问题(缺少权限、不同平台上的不同行为)之后,我建议将文件数据作为 BLOB 填充到数据库中。这样,您无需详细说明唯一的文件命名方案,所有敏感数据都将位于一个位置。

    在这种情况下,您将需要一个 servlet 进行下载,恕我直言,即使是访问存储在文件中的数据也是更好的方法。

    【讨论】:

    • 前段时间我也遇到过同样的问题。最终我决定将文件保存在文件系统中,因为存储的数据量预计会很大(TB 或原始视频)。我想知道 MySQL 或 PostgreSQL 等数据库如何处理 BLOB 中如此多的数据?
    猜你喜欢
    • 2012-12-12
    • 2019-11-17
    • 2010-09-22
    • 1970-01-01
    • 2011-03-10
    • 2015-07-26
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多