gpt4 book ai didi

java - 如何在 Tomcat 中自动创建新文件夹并将其用于存储上传的数据?

转载 作者:行者123 更新时间:2023-11-28 23:06:26 32 4
gpt4 key购买 nike

好的,我学习并实现了如何从服务器计算机本身的文件夹上传和检索图像。但是我已经在我的 webapp 目录中的一个文件夹中实现了它。我知道这不是一个好主意,但是具有路径 /image/*image servlet 无法访问设置了 context 的目录中的文件夹在 server.xml 中。代码是:Image.java servlet :

public class Image extends HttpServlet {

public static void returnFile(String filename, OutputStream out)
throws FileNotFoundException, IOException {
// A FileInputStream is for bytes
FileInputStream fis = null;
try {
fis = new FileInputStream(filename);
byte[] buf = new byte[4 * 1024]; // 4K buffer
int bytesRead;
while ((bytesRead = fis.read(buf)) != -1) {
out.write(buf, 0, bytesRead);
}
} finally {
if (fis != null) {
fis.close();
}
}
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Use a ServletOutputStream because we may pass binary information
ServletOutputStream out = response.getOutputStream();

// Get the file to view
String file = request.getPathTranslated();

// No file, nothing to view
if (file == null) {
out.println("No file to view");
return;
}

// Get and set the type of the file
String contentType = getServletContext().getMimeType(file);
response.setContentType(contentType);

// Return the file
try {
returnFile(file, out);
} catch (Exception ex) {
System.out.print("\n" + ex.getMessage() + "\n");
ex.printStackTrace();
}
}

上下文变量:

<Context path="*/photos/users" docBase="G:\myApp\images\users" debug="0" reloadable="true" />

我想要的是在我的 webapp 附近提供一个任意路径类似/data/users的东西来代替绝对路径G:\myApp\images\users 是在任何 Tomcat 6.x/7.x 服务器机器上首次部署 webapp 时动态创建的,并且可以在我想访问其中的数据时使用..我希望我的问题很清楚。

最佳答案

您可以使用 File.mkdir 创建一个目录或 File.mkdirs .第一个在其指定的父目录中创建目录,该目录必须已经存在。如果需要,第二个还会创建父目录和“祖先”目录。

请注意,您的应用程序可能没有足够的权限在任意位置创建目录或文件。此外,虽然 File.mkdirs 可以创建多个目录,但它不能在不存在的 Windows 驱动器上创建内容。因此,检查 mkdirmkdirs 方法返回的 boolean 很重要。 (如果它是 false,那么您对此无能为力!)


话虽如此,我认为 web 应用程序在 web 容器之外使用目录不是一个好主意,更不用说创建它们了。正如@Thorbjørn 的评论所暗示的那样,这可能会导致一系列可移植性和平台问题,并且会限制部署者在部署您的 web 应用程序时的选择(通常)。 Web 容器沙盒也存在问题……如果部署者选择这样做的话。

如果你确实使用文件系统来持久化你的 webapp 的状态,那么让部署者手动创建基本目录是一个更好的主意。至少这样他/她知道它已经创建以及它在哪里......如果他/她得到错误的路径名,webapp 可以检测到它并拒绝启动。 (这也解决了特权问题。对于部署者来说,以提升的特权运行 mkdir 命令比以提升的特权运行 Web 容器更好。)

关于java - 如何在 Tomcat 中自动创建新文件夹并将其用于存储上传的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8693473/

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