如何在Web应用程序容器上为特定用户创建文件夹?

时间:2012-12-24 04:14:01

标签: java web-applications

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

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

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

这可能吗?

3 个答案:

答案 0 :(得分:3)

我不会直接通过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,网址为http://server/read-file/xyz/a.pdf

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

  • 通过FileInputStream以1MB为单位读取文件,并在Content-Type and Content-Disposition标头中设置适当的值后写入ServletOutputStream(不存储在其间的任何位置)。

答案 1 :(得分:0)

请检查一下。 Create a New folder using Java Program on Windows and Linux machines

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

答案 2 :(得分:0)

您可以使用new File("path"+File.seperator+"foldername").mkdir()

在Java中创建目录

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

更好的方法是使用系统属性

将存储库路径配置到应用程序中

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

即使这种方法错误,因为在这种方法中无法扩展到多个应用程序服务器,最好将用户数据存储在中央存储库(amazon s3,rackspace文件)或数据库中。