【问题标题】:Architecture for managing files within a specific web application用于在特定 Web 应用程序中管理文件的架构
【发布时间】:2013-10-15 00:53:24
【问题描述】:

我正在使用 Laravel 4(与 Apache)来开发 Web 应用程序。我需要一些(技术)建议/解决方案来设计我的应用程序的一部分

这是我这部分问题的背景:

在我的 Web 应用程序中,我需要存储由不同用户上传的文件(图像或最大 150Mo 的视频)。用户可以与他选择的其他人共享他的一些文件。例如: “我已经上传了 image1.png,我只想与 Bob 和 Alice 共享它。如果我删除 image1.png,这个文件必须仍然可以被 Bob 和 Alice 访问,直到他们不再需要它(a如果没有用户链接到此文件,批处理可能会每天运行以将其删除)”。

问题:

  • 为了管理上传的文件,我想允许用户上传一些文件而不阻止他。他必须能够在上传期间浏览我的 Web 应用程序的所有页面并查看它们的状态(例如,在进度条中)。 我该怎么做? PHP 脚本和 Ajax 就足够了吗?像 jQuery File Upload 这样的 Jquery 插件可以做到这一点吗?
  • 为了存储我的文件,目前我使用的是单个目录。另外,我使用 Mysql 数据库围绕文件管理构建逻辑(例如:“image1.png 已由我上传,它的 url 目前与 Alice 和 Bob 共享。他们可以下载它”)。目前,它工作正常。只有 Alice 和 Bob 可以看到我的文件。但我不知道这对于可以增长的应用程序(就文件和用户而言)来说是否是一种好方法。 这是一个好的架构(单目录+数据库)吗?还是我必须为每个用户使用物理目录?
  • 我可以就我的应用程序的性能和优化获得任何建议吗?

任何帮助将不胜感激。 提前感谢,对不起我的英语不好。

【问题讨论】:

    标签: php jquery mysql architecture laravel


    【解决方案1】:

    为了管理上传的文件,我想允许用户上传一些文件而不阻止他。他必须能够在上传期间浏览我的 Web 应用程序的所有页面并查看它们的状态(例如,在进度条中)。我怎样才能做到这一点? PHP 脚本和 Ajax 就足够了吗?像 jQuery File Upload 这样的 Jquery 插件可以做到这一点吗?

    一旦用户离开页面,上传就会被取消。但是,这可以使用 AJAX(整个应用程序编写以利用 AJAX 的优势)。我不会那样做。

    为了存储我的文件,目前我使用的是单个目录。另外,我使用 Mysql 数据库围绕文件管理构建逻辑(例如:“image1.png 已由我上传,它的 url 目前与 Alice 和 Bob 共享。他们可以下载它”)。目前,它工作正常。只有 Alice 和 Bob 可以看到我的文件。但我不知道这对于可以增长的应用程序(就文件和用户而言)来说是否是一种好方法。这是一个好的架构(单目录+数据库)吗?或者我必须为每个用户使用物理目录?

    如果文件夹存储大量文件,性能会下降。
    我会将文件存储在子目录中。

    $hash = md5("image.png"); // let's say it produces "abcdefgh...." hash
    $directory = "{$hash[0]}{$hash[1]}/{$hash[2]}{$hash[3]}/{$hash[4]}{$hash[5]}"; // then file/folder structure would be "ab/cd/ef/image.png";
    

    这样,您可以随时从文件名中获取文件夹结构。

    我可以就我的应用程序的性能和优化获得任何建议吗?

    查看上一个答案。我想不出任何其他“问题”——在实施之前不要制造问题;)

    【讨论】:

      【解决方案2】:

      1) 坏主意/您必须在单独的窗口(或弹出窗口)中进行上传

      在上传完成之前页面必须保持打开状态,如果您可以在页面退出时暂停它然后在加载下一页后将其恢复到原来的位置,我会感到惊讶(而且它会很多工作可能没有那么多好处);除非您的应用程序包含在单个页面中。我曾经允许在上传期间使用后台应用程序,但它最终会根据用户行为导致许多意想不到的问题,现在我在上传期间冻结 bo,他们等待,更安全,没有错误,没有修复,没有麻烦

      2) 主要取决于您是否必须遍历/搜索文件系统中的文件,即不是来自指向服务器上文件的数据库查询

      3) 不,您必须为每个特定问题创建一个单独的问题,但您不妨谷歌 jquery 优化

      我想我会在 db 表中存储指向文件的指针,并使用系统将查询结果缓存在文件中的 json 中(每次用户删除/添加文件时都会更新缓存)(所以即使用户对 db 有很多查询保持低)+我将允许多个文件选择+让用户等待他们的上传完成(如果有的话,也用于服务器文件处理 - 可能除了视频编辑 - 太长) - 我不喜欢弹出窗口

      【讨论】:

      • 拜托,你能给我更多关于你的答案的细节吗? 1)为什么是个坏主意?这种方法的缺点是什么? 2)我不确定您“遍历文件”的含义,但我认为会是这样。例如,获取特定用户上传的所有文件。 3) 对此感到抱歉。对我来说,这是一个与前面几点直接相关的问题。它不仅与 jquery 有关,而且与我将要针对其他两点做的事情有关。
      • 页面必须保持打开状态,直到上传完成,如果您可以在页面退出时暂停它然后在加载下一页后将其恢复到原来的位置,我会感到惊讶(&它' d 做很多工作,也许没有那么多好处);除非您的应用程序包含在单个页面中。我曾经允许在上传期间使用后台应用程序,但它最终会根据用户行为导致许多意想不到的问题,现在我在上传期间冻结 bo,他们等待,更安全,没有错误,没有修复
      • 好的,谢谢您的解释。我的问题是这种方法,用户必须在上传期间等待,并且不能使用 Web 应用程序的其他部分。
      • & 他们为什么会这样?没那么多人这么多才多艺!无论如何,在 ajax 请求上构建您的应用程序,这是唯一的方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2011-09-10
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多