0

用户可以在我的网站上上传图片。我的 servlet 需要将上传内容写入我的 webapp 的目录图像中。为了将它写入磁盘,我需要创建一个 File() 对象。

一种方法是我可以将完整路径硬编码到类似的东西

new File("/usr/tomcat/webapps/ROOT/images/file.jpg")

有没有办法让我可以指定类似new File("images/file.jpg").. 我可以使用 new File (URI uri ) 来完成它,这样我就不必对完整路径进行硬编码。我的 servlet 位于里面/usr/tomcat/webapps/ROOT/WEB-INF/classes/

images 文件夹不是目录。它实际上是一个符号链接,它指向 tomcat 之外的文件系统上的另一个目录

4

3 回答 3

2

不要将图像存储在您的 webapp 部署目录下:下次重新部署应用程序时,您将丢失所有图像。此外,webapp 并不总是有目录,因为它通常部署为 war 文件。

将您的图像存储在外部位置的绝对路径中,并配置 Tomcat 或其他 Web 服务器以提供来自该位置的图像,或者实现一个提供来自该位置的图像的 servlet。

有关其他指针,请参阅JSP 中的图像上传和显示。

编辑:

如果您的问题是 Java 代码中的硬编码绝对路径,请使用您在启动 Tomcat 时设置的系统属性,或 web.xml 中的上下文参数,或使用属性文件来存储路径或您的数据库。

于 2012-05-28T12:10:50.927 回答
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 构造函数的参数。

于 2012-05-28T12:10:29.050 回答
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 之外。

如果您想保持相同的文件名,则文件命名始终取决于您,然后需要处理重复检查,否则指定一些动态格式并命名它。

于 2012-05-28T12:14:33.953 回答