我想在服务器上创建一个与我的Web应用程序中的每个用户相对应的文件夹。
如何动态地通过java创建新文件夹? 我希望新文件夹包含与特定用户相对应的资源。我现在可以通过直接提供该资源的URL来访问这些资源作为客户端 对于前..
http://localhost:8080/myapp/newfolder/a.pdf
这可能吗?
答案 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()
我假设您的目标是在Web应用中的war文件夹中创建它。这不是推荐的方法,因为如果重新部署战争,将丢失用户数据。
更好的方法是使用系统属性
将存储库路径配置到应用程序中例如:repository = D:\ userdata 并在此repo中创建您的文件夹。然后您可能需要一个自定义servlet来允许下载此文件,您将必须读取该文件并将其放入servlet响应中。重新部署war文件不会影响此文件夹。
即使这种方法错误,因为在这种方法中无法扩展到多个应用程序服务器,最好将用户数据存储在中央存储库(amazon s3,rackspace文件)或数据库中。