用于管理特定 Web 应用程序中文件的体系结构


Architecture for managing files within a specific web application

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

这是我这部分问题的上下文:

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

问题:

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

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

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

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

2(主要取决于您是否必须迭代/搜索文件系统中的文件,即不是从指向服务器上文件的数据库查询

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

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

为了管理上传的文件,我想允许用户上传一些文件而不会阻止他。他必须能够在上载期间浏览我的 Web 应用程序的所有页面并查看其状态(例如,在进度栏中(。我该怎么做?PHP脚本和Ajax就足够了吗?像jQuery文件上传这样的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";

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

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

请参阅之前的答案。我无法提出任何其他"问题" - 在实施之前不要制造问题;)