2015-11-13 164 views
0

我在從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) 
+0

'Paths.get(...)'永遠不會返回空路徑。會發生什麼,也許'/ var/webapp/images'不存在。嘗試和'Files.createDirectories(文件夾)'。 – fge

+0

@fge確實該文件夾不是正確的。但我不明白的是,在窗口中,根目錄被認爲是野蠻文件夾所在的文件夾。現在在Ubuntu的真正的根文件夾/ – Ced

回答

1

檢查/var/webapp/images的權限以授予cedric許可權。最簡單的方法可能是ls -l /var/webapp | grep images並獲得擁有images的組(並確保images是組可寫的)。然後將cedric添加到該組。假設這是www-data可能看起來像

sudo usermod -a -G www-data cedric 

下一個最簡單的辦法是啓用並添加ACLs

+0

謝謝,這實際上是因爲當我在Windows上時,路徑的根被認爲是Web應用程序服務器所在的位置。現在root是ubuntu文件系統的真正/根。 IDK。 – Ced

相關問題