【问题标题】:Tomcat write permission apache server user uploadsTomcat写权限apache服务器用户上传
【发布时间】:2020-11-04 05:56:11
【问题描述】:

当用户上传图像时,tomcat webapp 在“/var/www/example.com/uploads”中创建文件,以便 apache 可以提供图像。但是,tomcat 组/用户创建了该文件,因此无法通过 example.com/uploads/image.jpg 访问它,除非我手动更改读取权限,否则该文件不再被禁止。但是,每个文件都是在没有读取权限的情况下创建的。我不熟悉 ubuntu,我不知道是否需要更改 java servlet 中的某些内容或更改文件夹/组/用户。任何帮助将不胜感激。

-rw-r----- 1 tomcat tomcat 120264 Jul 14 19:26 second-image.jpg
-rw-r--r-- 1 tomcat tomcat 172853 Jul 14 19:05 image.png

编辑: 该文件作为多部分配置表单数据提交。在检查完类型、大小等后,将其写入系统简单如下:

Path imageDir = Path.of("/var/www/example.com/uploads");
Path imageFile = Files.createFile(imageDir.resolve(fileName).toAbsolutePath());
part.write(imageFile.toString());

【问题讨论】:

  • 另外,检查目录的权限。除非目录已经执行,否则文件不会加载到网页中。
  • 请发布编写这些文件的应用程序代码的最小示例。它可以通过多种方式完成,使用提供的库或 3rd-party 代码,所有这些都会影响潜在的答案。
  • 好的,刚刚更新了帖子。
  • 另外,在我将 PC 移到服务器之前,这一切都在我的 PC 上运行。当然是windows了,文件权限不一样,搬到服务器上的时候就苦练了一番。

标签: java tomcat


【解决方案1】:

您的应用程序代码已经在调用能够设置权限的方法,但没有提供这样做的参数。您可以阅读this tutorial on File Attributes 以查看设置文件权限的示例。我猜您想从字符串创建权限,因为您已经在使用以下格式:

Set<PosixFilePermission> perms =
PosixFilePermissions.fromString("rw-------");
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);
Files.createFile(file, attr);

【讨论】:

  • 感谢您的回复。我按照您的建议修改了代码,但文件属性实际上并没有改变。我将字符串更改为“rw-r--r--”,但文件仍以“rw-r-----”的形式上传。关于为什么这可能不起作用的任何想法?
  • 可能是tomcat用户没有操作权限,或者是其他环境因素干扰。
  • 我想通了。事实证明 part.write() 将已经设置的权限改回来。在使用 part.write() 写入文件后,我不得不使用 Files.setPosixFilePermissions(imageFile, perms)。非常感谢您的帮助!
  • 很高兴听到您成功了!调查工作做得很好。
猜你喜欢
  • 2011-12-18
  • 2012-04-05
  • 2015-08-28
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多