2013-11-26 3 views
1

У меня есть веб-приложение java, работающее с tomcat7. У меня есть сервлет, который отображает изображения. Я использую File class. Тем не менее, он возвращает ложь, когда я звоню существует() как такПуть к файлу по-русски

imageFile = new File(filesDir + "images/", id + "_" + size + "." + file_extension); 

// Check if file actually exists in filesystem. 
if (!imageFile.exists()) { 
    // render 404 
} 

Я жёстко реж в код, чтобы убедиться, что это на самом деле указывает на файл. Я использую каталог «/ usr/share/tomcat7/webapps/files/images /». После чтения документации для класса файлов в ней указано:

«Этот каталог называется системным свойством user.dir и обычно является каталогом, в котором была вызвана виртуальная машина Java».

Как предоставить java разрешения для загрузки такого каталога? Или есть лучший каталог, в который я должен размещать свои файлы?

Edit "ps -ef | grep tomcat" 

tomcat 16099  1 0 Nov22 ?  00:07:03 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat7/temp -Djava.util.logging.config.file=/usr/share/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start 
root  18217 18179 0 18:00 pts/0 00:00:00 vi /usr/share/tomcat7/logs/catalina.out 
root  18376 18364 0 18:11 pts/2 00:00:00 grep tomcat 
root  22805  1 0 Sep10 ?  02:22:53 /opt/jasperreports-server-cp-5.2.0/java/bin/java -Djava.util.logging.config.file=/opt/jasperreports-server-cp-5.2.0/apache-tomcat/conf/logging.properties -Xms1024m -Xmx2048m -XX:PermSize=32m -XX:MaxPermSize=512m -Xss2m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/jasperreports-server-cp-5.2.0/apache-tomcat/endorsed -classpath /opt/jasperreports-server-cp-5.2.0/apache-tomcat/bin/bootstrap.jar -Dcatalina.base=/opt/jasperreports-server-cp-5.2.0/apache-tomcat -Dcatalina.home=/opt/jasperreports-server-cp-5.2.0/apache-tomcat -Djava.io.tmpdir=/opt/jasperreports-server-cp-5.2.0/apache-tomcat/temp org.apache.catalina.startup.Bootstrap start 
+0

Почему вы используете 'URLDecoder.decode()'? –

+0

После прочтения javadoc для него. Мне это не нужно. Я возьму его и запустим. Я не предполагал, что это вызовет проблему. Однако мы увидим – Sixthpoint

+0

Если вы используете абсолютный путь ('/ usr/share/tomcat7/webapps/files/images /'), то вы не используете текущий каталог ('user.dir'). Текущий каталог используется только для относительных путей. – Boann

ответ

0

Проблема была в том, что упоминал @gmansoor. У сервера tomcat не было прав доступа к каталогу. Я переместил файлы на «/ var/lib/tomcat7/webapps/files /». Папка webapps указана в файле catalina.properties. После этого я chmod 777 каталог файлов, которые позволяют java открыть файл.