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

时间:2013-10-08 07:45:40

标签: php jquery mysql architecture laravel

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

以下是我对此部分的问题的背景:

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

问题:

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

任何帮助都会受到赞赏。 提前谢谢,抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

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

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

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

3)您不必为每个特定问题创建单独的问题,但您可能还有google jquery优化

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

答案 1 :(得分:-1)

  

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

一旦用户离开页面,上传就会被取消。但是,这是可行的使用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";

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

  

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

参见上一个答案。我无法提出任何其他“问题” - 在实施之前不要创建问题;)