1

我想在我的服务器上创建一个文件夹,对应于我的 Web 应用程序中的每个用户。

我如何通过java动态创建一个新文件夹?我希望该新文件夹包含与特定用户相对应的资源。我现在可以通过直接提供该资源的 URL 来作为客户端访问这些资源吗例如..

    http://localhost:8080/myapp/newfolder/a.pdf

那可能吗?

4

3 回答 3

3

我不会直接通过 URL 公开文件夹,因为这将是一个严重的安全问题,如果理解命名方案,一个用户可以访问另一个用户的文件夹。

相反,我会

  • 在无法通过 URL 访问的单独位置按用户名创建文件夹,使用java.io.File.mkdir().
  • 编写一个简单的 Servlet,它会从路径中读取servletRequest.getPathInfo()、标识用户名以及要提供的文件。为此,servlet 类和 URL 模式应定义如下:

    <servlet-mapping>
        <servlet-name>read-file</servlet-name>
        <url-pattern>/read-file/*</url-pattern>
    </servlet-mapping>
    

    要访问a.pdf用户文件xyz,URL 将是http://server/read-file/xyz/a.pdf.

  • 检查访问 URL 的用户是否与路径信息中找到的用户名相同。

  • 在和标头中设置适当的值后,通过 a in 块读取文件FileInputStream,例如 1MB,并写入(中间不存储任何位置) 。ServletOutputStreamContent-TypeContent-Disposition
于 2012-12-24T04:41:26.163 回答
0

只需检查一下。 在 Windows 和 Linux 机器上使用 Java 程序创建一个新文件夹

此外,您可以存储目录和相应用户的路径映射。

于 2012-12-24T04:38:26.267 回答
0

您可以使用 Java 创建一个目录new File("path"+File.seperator+"foldername").mkdir()

我假设您的目标是在 web 应用程序的 war 文件夹中创建它。这不是推荐的方法,因为如果您重新部署您的战争,您将丢失用户数据。

更好的方法是使用系统属性将存储库路径配置到您的应用程序中

例如:repository=D:\userdata 并在此 repo 中创建您的文件夹。然后您可能需要一个自定义 servlet 以允许下载此文件,您必须阅读该文件并将其放入 servlet 响应中。此文件夹不会受到重新部署war文件的影响。

即使这种方法也是错误的,因为您无法在这种方法中扩展到多个应用服务器,最好将用户数据存储在中央存储库(amazon s3,机架空间文件)或数据库中。

于 2012-12-24T04:39:34.800 回答