gpt4 book ai didi

servlets - 如何在基于 servlet 的 Web 应用程序中临时保存生成的文件

转载 作者:行者123 更新时间:2023-12-03 20:16:28 25 4
gpt4 key购买 nike

我正在尝试生成一个 XML 文件并将其保存在 /WEB-INF/pages/ .

下面是我使用相对路径的代码:

File folder = new File("src/main/webapp/WEB-INF/pages/");
StreamResult result = new StreamResult(new File(folder, fileName));

在我的本地机器上作为应用程序运行时它工作正常 (C:\Users\userName\Desktop\Source\MyProject\src\main\webapp\WEB-INF\pages\myFile.xml).
但是在服务器机器上部署和运行时,它抛出以下异常:

javax.xml.transform.TransformerException: java.io.FileNotFoundException C:\project\eclipse-jee-luna-R-win32-x86_64\eclipse\src\main\webapp\WEB INF\pages\myFile.xml



我试过 getServletContext().getRealPath()同样,但它正在返回 null在我的服务器上。有人可以帮忙吗?

最佳答案

从不 在 Java EE Web 应用程序中使用相对本地磁盘文件系统路径,例如 new File("filename.xml") .更深入的解释,另见 getResourceAsStream() vs FileInputStream .
从不 使用 getRealPath()目的是获取写入文件的位置。更深入的解释,另见 What does servletcontext.getRealPath("/") mean and when should I use it .
从不 无论如何都要将文件写入部署文件夹。更深入的解释,另见 Recommended way to save uploaded files in a servlet application .
始终将它们写入预定义绝对路径上的外部文件夹。

  • 要么硬编码:
      File folder = new File("/absolute/path/to/web/files");
    File result = new File(folder, "filename.xml");
    // ...
  • 或者在one of many ways中配置:
      File folder = new File(System.getProperty("xml.location"));
    File result = new File(folder, "filename.xml");
    // ...
  • 或利用 container-managed temp folder :
      File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR);
    File result = new File(folder, "filename.xml");
    // ...
  • 或利用 OS-managed temp folder :
      File result = File.createTempFile("filename-", ".xml");
    // ...

  • 另一种方法是使用(嵌入式)数据库或 CDN 主机(例如 S3)。
    也可以看看:
  • 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
  • 关于servlets - 如何在基于 servlet 的 Web 应用程序中临时保存生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255366/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com