1

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

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

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

问题:

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

任何帮助将不胜感激。在此先感谢并为我的英语不好感到抱歉。

4

2 回答 2

0

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

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

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

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

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

于 2013-10-08T08:03:45.350 回答
-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";

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

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

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

于 2013-10-08T09:32:07.860 回答