How to save generated file temporarily in servlet based web application

后端 未结 2 864
野的像风
野的像风 2020-11-22 03:38

I am trying to generate a XML file and save it in /WEB-INF/pages/.

Below is my code which uses a relative path:

File folder = new File(\         


        
2条回答
  •  花落未央
    2020-11-22 04:25

    Never use relative local disk file system paths in a Java EE web application such as new File("filename.xml"). For an in depth explanation, see also getResourceAsStream() vs FileInputStream.

    Never use getRealPath() with the purpose to obtain a location to write files. For an in depth explanation, see also What does servletcontext.getRealPath("/") mean and when should I use it.

    Never write files to deploy folder anyway. For an in depth explanation, see also Recommended way to save uploaded files in a servlet application.

    Always write them to an external folder on a predefined absolute path.

    • Either hardcoded:

        File folder = new File("/absolute/path/to/web/files");
        File result = new File(folder, "filename.xml");
        // ...
      
    • Or configured in one of many ways:

        File folder = new File(System.getProperty("xml.location"));
        File result = new File(folder, "filename.xml");
        // ...
      
    • Or making use of container-managed temp folder:

        File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR);
        File result = new File(folder, "filename.xml");
        // ...
      
    • Or making use of OS-managed temp folder:

        File result = File.createTempFile("filename-", ".xml");
        // ...
      

    The alternative is to use a (embedded) database or a CDN host (e.g. S3).

    See also:

    • Recommended way to save uploaded files in a servlet application
    • Where to place and how to read configuration resource files in servlet based application?
    • Simple ways to keep data on redeployment of Java EE 7 web application
    • Store PDF for a limited time on app server and make it available for download
    • What does servletcontext.getRealPath("/") mean and when should I use it
    • getResourceAsStream() vs FileInputStream

提交回复
热议问题