我在从web服务器上保存磁盘上的照片时遇到了一些麻烦。这可能是关于将文件保存在磁盘上的足够权限的问题。至少我认为这就是错误所在。我只是切换到Ubuntu的,所以我有点不熟悉如何工作。将上传的文件保存在磁盘上,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
。它应该创建一个新文件,确保没有这样的文件。或者也许它意味着父母?但它不是空的。或者,也许这是特权的事情?我不明白。
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());
输出:folder path : /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)
'Paths.get(...)'永远不会返回空路径。会发生什么,也许'/ var/webapp/images'不存在。尝试和'Files.createDirectories(文件夹)'。 – fge
@fge确实该文件夹不是正确的。但我不明白的是,在窗口中,根目录被认为是野蛮文件夹所在的文件夹。现在在Ubuntu的真正的根文件夹/ – Ced