【问题标题】:How to create a java.io.File Object with URI?如何使用 URI 创建 java.io.File 对象?
【发布时间】:2012-05-28 12:04:57
【问题描述】:

用户可以在我的网站上上传图片。我的 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/

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

【问题讨论】:

    标签: java servlets file-upload java-io


    【解决方案1】:

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

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

    请参阅Image Upload and Display in JSP 以获取更多提示。

    编辑:

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

    【讨论】:

      【解决方案2】:

      您可以从 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 构造函数。

      【讨论】:

        【解决方案3】:
         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 之外。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-30
          • 2011-11-07
          • 2020-07-02
          • 1970-01-01
          相关资源
          最近更新 更多