用户可以在我的网站上传图片。我的servlet需要将上传内容写入我的webapp的目录映像中。要将其写入磁盘,我需要创建一个File()对象。
一种方法是我可以将完整路径硬编码为
new File("/usr/tomcat/webapps/ROOT/images/file.jpg")
有没有办法可以指定类似new File("images/file.jpg")
的东西..我可以使用新文件(URI uri)来完成它,这样我就不必硬编码完整路径了。我的servlet位于/usr/tomcat/webapps/ROOT/WEB-INF/classes/
images文件夹不是目录。它实际上是一个符号链接,它指向tomcat外部文件系统上的另一个目录
答案 0 :(得分:2)
不要在您的webapp部署目录下存储图像:下次重新部署应用时,您将丢失所有图像。而且,并不总是有一个webapp目录,因为它通常被部署为war文件。
将图像存储在外部位置,绝对路径,并配置Tomcat或其他Web服务器以从此位置提供图像,或实现从此位置提供图像的servlet。
有关其他指示,请参阅Image Upload and Display in JSP。
编辑:
如果您的问题是Java代码中的硬编码绝对路径,请使用您在启动Tomcat时设置的System属性,或web.xml中的上下文参数,或使用属性文件存储路径,或者你的数据库。
答案 1 :(得分:0)
您可以从ServletContext对象获取Web应用程序路径。您从HttpServletRequest对象(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getServletContext%28%29)获取ServletContext
见http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath%28java.lang.String%29
将“真实路径”连接到所需的图像文件路径,并将其作为File构造函数的参数提供。
答案 2 :(得分:0)
try{
String directory = //Store it in your Property file and pick it
String filename= //Generate Dynamic name or any specific format
// Create file
FileWriter fstream = new FileWriter(directory+filename);
BufferedWriter out = new BufferedWriter(fstream);
out.write("your content"); }
catch (Exception e){
System.err.println("Error: " + e.getMessage()); }
finally {
//Close the output stream
out.close();
}
如果不经常更改,您可以将目录路径保留在属性文件中。 目录名称可以是绝对路径,也可以是硬盘路径,也可以将其保存在webapp中,但始终建议将任何输入文件保留在webapp之外。
如果你想保留相同的文件名然后需要处理重复检查,那么文件命名总是取决于你,否则请指定一些动态格式并命名它。