好的,我学习并实现如何从服务器计算机本身的文件夹上传和检索图像。但是我已经在我的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 variable:
<Context path="*/photos/users" docBase="G:\myApp\images\users" debug="0" reloadable="true" />
我想要的是在我的webapp附近提供任意路径之类的 / data / users 来代替绝对路径 G:\ myApp \ images \用户是在任何Tomcat 6.x / 7.x服务器计算机上首次部署webapp时动态创建的,并且可以在我想访问其中的数据时使用。 我希望我对我的问题很清楚。
答案 0 :(得分:1)
您可以使用File.mkdir
或File.mkdirs
创建目录。第一个在其指定的父级中创建目录,该父级必须已存在。如果需要,第二个也创建父目录和“祖先”目录。
请注意,您的应用程序可能没有足够的权限在任意位置创建目录或文件。此外,虽然File.mkdirs
可以创建许多目录,但它不能在不存在的Windows驱动器上创建内容。因此,请务必检查boolean
和mkdir
方法返回的mkdirs
。 (如果它是false
,那么就没有什么可以做的了!)
话虽如此,我不认为webapp使用Web容器之外的目录是个好主意,更不用说创建它们了。正如@Thorbjørn的评论所暗示的,这可能导致一系列可移植性和平台问题,并且它可以限制部署者部署Web应用程序的选项(通常)。 Web容器沙盒也存在问题...如果部署者选择这样做。
如果您确实使用文件系统来保持webapp状态的持久性,那么让部署者手动创建基本目录是个更好的主意。至少他/她知道它已被创建以及它在哪里......如果他/她得到路径名错误,webapp可以检测到这一点并拒绝启动。 (这也解决了权限问题。对于部署者来说,运行带有提升权限的mkdir
命令比运行具有提升权限的Web容器更好。)