【问题标题】:Developing a file storage web application开发文件存储 Web 应用程序
【发布时间】:2011-03-26 00:04:10
【问题描述】:

我目前正在开发一个 Web 应用程序,其主要用户功能是上传和下载文件。文件将存储在硬盘上(尚无云存储)。

考虑到千兆字节数据和大量文件的可能性,我是否需要将文件组织到子文件夹中以考虑文件的获取,或者文件系统的索引是否已经非常有效,我可以忽略这一点潜在的瓶颈?

更新:

附带说明一下,我计划将文件名和任何其他信息存储在 SQL 数据库中,并且仅在用户真正想要下载文件时才查询磁盘。这就是我计划检索文件的方式:

FileStream stream = File.Open("C:\file.txt");
byte[] fileContent = new byte[stream.Length];
stream.Read(fileContent, 0, fileContent.Length;

将从数据库中检索任何文件信息。硬盘仅用于保存和获取文件。

更新 2:

文件将在硬盘上保存为GUID + EXTENSION,而实际文件名存储在数据库中。

【问题讨论】:

    标签: c# asp.net windows filesystems


    【解决方案1】:

    是的,您需要进一步细分文件以节省用于在目录中枚举文件的时间,但使用此方法可以节省多少可能取决于您使用的操作系统。当您需要从文件夹中的数百个文件中请求一个文件时,Windows 会非常慢。我相信这是因为它会尝试读取所有文件的所有属性,如果它必须搜索它们。此外,对于此类应用程序,您可能需要担心文件版本、文件上传超时、文件感染病毒、对最终用户隐藏真实文件路径、不支持的 mime 类型等。

    【讨论】:

      【解决方案2】:

      加上@cahitbox 所说的,它比这更进一步。如果您希望有多个并发用户,您应该有多个磁盘,以便您可以同时检索多个文件(磁盘很慢)。

      【讨论】:

        【解决方案3】:

        如果文件“元数据”存储在数据库中,您只需使用 GUID 及其扩展名命名文件。 将它们返回给用户的最简单方法是将它们直接存储在您的 Web 应用程序中,因此如果安全限制不太严格,它们可以通过简单的 url 获得:

        http://my.web.site/files/cbacd260-10ec-4377-bd19-25daa1fd0fe2.pdf
        

        如果你真的想通过 HttpHandler 提供文件,我会使用

        Response.TransmitFile( Server.MapPath("path/to/files/cbacd260-10ec-4377-bd19-25daa1fd0fe2.pdf" );
        

        此处的文档:http://msdn.microsoft.com/en-us/library/12s31dhy%28VS.80%29.aspx

        预期的用户数量也很重要。每天 30 个用户与 30 000 个用户不同。 文件容量也很重要:您谈论的是千兆字节,但您不会像管理 300 GB 那样管理 30 GB。

        对于文件的物理存储,尽量避免在同一目录中存储太多(我认为是 2500+)文件。但通常,对于文件上传网站,您会将它们按逻辑“分组”,因此您可以拥有一个子目录。

        【讨论】:

        • 我目前已经设置好了。用户上传文件,文件名和扩展名存储在数据库中,但文件以GUID+扩展名保存在硬盘上。
        【解决方案4】:

        我认为您还需要考虑以下问题:

        • 将向用户显示文件列表,或者用户将使用文件的直接链接对文件进行操作
        • 您需要进行备份吗?
        • 您打算使用数据库来存储附加信息,还是只使用文件系统?
        • 您的应用程序有任何类型的安全性或权限吗?
        • 应用程序必须具备哪些性能(并发读取数、并发写入数、响应时间、上传/下载速度)?
        • 您需要任何类型的搜索吗?
        • 是否需要保存原始文件名?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 2010-12-02
          • 2015-09-08
          • 1970-01-01
          • 2011-09-21
          相关资源
          最近更新 更多