java - 将上传的文件保存在磁盘、ubuntu 路径上

标签 java ubuntu path

我在将网络服务器上的图片保存到磁盘上时遇到一些问题。这可能与在磁盘上保存文件的足够权限有关。至少我认为这就是错误的原因。我刚刚切换到 ubuntu,所以我有点不熟悉它是如何工作的。

在我的 Windows 上:

    System.out.println("1");
    Path folder = Paths.get("/var/webapp/images"); // not null
    System.out.println("2");

    UploadedFile uploadedFile = e.getFile();
    String filename = "profile_pic";
    String extension = FilenameUtils.getExtension(uploadedFile
            .getFileName());
    System.out.println("3");

    Path file = Files.createTempFile(folder, filename + "-", "."
            + extension);
    System.out.println("4");
    //1,2,3,error

这在 ubuntu 上给了我一个 NoSuchFileException 。它应该创建一个新文件,因此确保不存在这样的文件。或者也许这意味着 parent ?但它不是空的。或者也许这就是特权?我不明白。

Caused by: java.nio.file.NoSuchFileException: /var/webapp/images/profile_pic-6949678835586050878.png
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.createFile(Files.java:632)
    at java.nio.file.TempFileHelper.create(TempFileHelper.java:138)
    at java.nio.file.TempFileHelper.createTempFile(TempFileHelper.java:161)
    at java.nio.file.Files.createTempFile(Files.java:852)
    at main.java.managedbeans.UserProfileEdit.fileUploadListener(UserProfileEdit.java:109)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:292)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    ... 42 more


    System.out.println("folder path : " + folder.toAbsolutePath().toString());

输出:文件夹路径:/var/webapp/images

我确实尝试看看这是否是一种特权,但我不确定我到底在做什么。

ps aux | egrep '(wildfly)'
cedric   24184  3.5 14.2 4290528 870928 ?      Sl   20:04   3:03 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dprogram.name=JBossTools: WildFly  9.x  -server -Xms64m -Xmx512m -Dorg.jboss.resolver.warning=true -Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/home/cedric/Applications/wildfly-9.0.2.Final/standalone/log/boot.log -Dlogging.configuration=file:/home/cedric/Applications/wildfly-9.0.2.Final/standalone/configuration/logging.properties -Djboss.home.dir=/home/cedric/Applications/wildfly-9.0.2.Final -Dorg.jboss.logmanager.nocolor=true -Djboss.bind.address.management=localhost -Dfile.encoding=UTF-8 -classpath /home/cedric/Applications/wildfly-9.0.2.Final/jboss-modules.jar org.jboss.modules.Main -mp /home/cedric/Applications/wildfly-9.0.2.Final/modules -jaxpmodule javax.xml.jaxp-provider -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -b localhost --server-config=standalone.xml -Djboss.server.base.dir=/home/cedric/Applications/wildfly-9.0.2.Final/standalone
cedric   26485  0.0  0.0  13952  2468 pts/1    S+   21:30   0:00 grep -E --color=auto (wildfly)

最佳答案

检查 /var/webapp/images 的权限给予塞德里克写作许可。最简单的方法可能是 ls -l /var/webapp | grep images并获取拥有 images 的组(并确保 images 是组可写的)。然后添加cedric到那个小组。假设是www-data这可能看起来像

sudo usermod -a -G www-data cedric

下一个最简单的选项是启用并添加 ACLs .

关于java - 将上传的文件保存在磁盘、ubuntu 路径上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33702976/

相关文章:

java - 在 netty 中,可以将池化的 ByteBuf 传递给另一个线程吗?

java - Genexus Uploadify 不适用于大文件

java - Hibernate删除行和外键行ManyToOne

mongodb - 无法在 ubuntu 18.04 LTS 上正确安装 mongodb

java - 尽管文件存在,但 FileNotFoundException

java - 在 codhaus 和 fastexml 上使用 lombok 的 Jackson ObjectMapper 默认值

python - 在 Ubuntu 中安装最新的 scipy (0.9)?

bash - 在 gnome 终端的新选项卡中运行脚本

python - 将 Python 中的路径添加到笔记本中

Python 2.6 文件存在 errno 17,