我有一个 tomcat webapp,它从图像生成缩略图并希望将其保存到可写位置 (chmod 777)。但出于某种原因,我总是收到java.nio.file.FileSystemException
错误,无法写入该图像。
它在我的本地计算机上运行(在 intellij 中运行 webapp),但在我的 azure ubuntu 18.04 服务器 vm 上却不行。我可以以任何用户身份从终端在该目录中创建一个文件。
java.nio.file.FileSystemException: /var/www/html/static/avatars/8SZK9w.jpg: Read-only file system
Jun 25 17:07:17 ubu18 tomcat9[103802]: at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100) ~[na:na]
Jun 25 17:07:17 ubu18 tomcat9[103802]: at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[na:na]
Jun 25 17:07:17 ubu18 tomcat9[103802]: at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) ~[na:na]
Jun 25 17:07:17 ubu18 tomcat9[103802]: at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:215) ~[na:na]
Jun 25 17:07:17 ubu18 tomcat9[103802]: at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:478) ~[na:na]
Jun 25 17:07:17 ubu18 tomcat9[103802]: at java.base/java.nio.file.Files.newOutputStream(Files.java:219) ~[na:na]
Jun 25 17:07:17 ubu18 tomcat9[103802]: at java.base/java.nio.file.Files.write(Files.java:3487) ~[na:na]
...
我尝试了很多方法,比如更改文件夹的所有权、将其修改为 777、将路径更改为 /tmp(反而触发了 FileNotFoundException)、使用不同的 Java 代码写入文件。我还禁用了 apparmor。
对于造成这种情况的原因有什么建议吗?
答案1
此问题与 Debian 的 tomcat 沙盒有关。解决方案已在此处描述:
https://stackoverflow.com/questions/56827735/how-to-allow-tomcat-war-app-to-write-in-folder