在我的vps上,我想将文件上传到Logos目录。
我的vps目录结构如下 -
/home/webadmin/domain.com/html/Logos
当通过我的jsp页面上传文件时,该文件被重命名,然后我想将它放入Logos目录....但我似乎无法在我的servlet代码中获得正确的路径。 / p>
servlet代码片段 -
String upload_directory="/Logos/"; // path to the upload folder
File savedFile = new File(upload_directory,BusinessName+"_Logo."+fileExtension);
//.....
//file saved to directory
//.....
我尝试了很多变化,但仍然失败了。指定路径的正确方法是什么?
被修改
使用getServletContext()的问题是它返回Tomcat和我的webapp所在目录的路径...而我想要到达我的html和图像文件所在的目录 - 在vps的根目录下。如何指定该路径?
String server_path = getServletContext().getRealPath("/"); // get server path.
//server_path = /opt/tomcat6/webapps/domain.com/
String upload_directory = "Logos/"; // get path to the upload folder.
String complete_path = server_path + upload_directory; // get the complete path to the upload folder.
//complete_path = /opt/tomcat6/webapps/domain.com/Logos/
File savedFile = new File(complete_path,"NewLogo.jpg");
//savedFile = /opt/tomcat6/webapps/domain.com/Logos/NewLogo.jpg
答案 0 :(得分:3)
通常的做法是使存储路径可配置 - 通过某个application.properties
文件,或者如果您没有这样的属性文件 - 作为context-param
中的web.xml
。在那里,您将路径配置为绝对路径,如:
configuredUploadDir=/home/webadmin/domain.com/html/Logos
在代码中获取该值(取决于您的存储方式),并具有:
File uploadDir = new File(configuredUploadDir);
注意:确保您具有读取和写入目标目录的权限。
答案 1 :(得分:2)
您可以在任何jsp或servlet中使用以下代码。
1)String serverPath = getServletContext()。getRealPath(“/”);
这将为您提供从根目录到Web应用程序目录的服务器的完整路径 对我来说,当我从myapp应用程序进行sysout时,“D:\ local \ tomcat-6.0.29 \ webapps \ myapp”。
如上所述获得服务器系统的完整实际路径后,您可以获得相对于目录的路径。因此,如果我在 myapp \ data 中有一些数据文件 - 我可以将 \ data \ filename 附加到我们之前获得的serverPath。
即使您在同一系统上安装了多台服务器,这也适用于所有情况。
2)您可以使用
从系统属性获取服务器回家System.getProperty( “TOMCAT_HOME”)
然后可以在程序中使用绝对路径
3)使用<init-param>
希望这对你有用。
答案 2 :(得分:1)
嗯,问题是:文件构造函数不创建文件,只准备创建,然后,在构造文件实例后,你必须调用createNewFile()方法,这就是全部。
答案 3 :(得分:0)
路径“/ Logos /”将尝试在系统的根目录中创建文件,这不是您想要的。查看ServletContext.getRealPath()方法。