Хорошо, я узнаю и реализую, как загружать и извлекать изображения из папки на самой серверной машине. Но я реализую это в папке, которая сама находится в моем каталоге webapp. Я знаю, что это не очень хорошая идея, но что image
сервлет с путём /image/*
не может получить доступ к папке в каталоге с context
путь установлен в server.xml
. Коды: Image.java servlet
:Как я могу создать новую папку в Tomcat автоматически и использовать ее для хранения загруженных данных?
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" />
Что я хочу, чтобы дать произвольному пути что-то вроде /данных/пользователей рядом с моей веб-приложение в место абсолютного пути G: \ myApp \ images \ users который создается динамически при первом развертывании webapp на любом серверном компьютере Tomcat 6.x/7.x и может использоваться всякий раз, когда я хочу получить доступ к данным внутри него. Надеюсь, я поняла с моим вопросом.
Обратите внимание, что это вне того, что разрешено спецификацией сервлета , Это может вызвать проблемы при переходе на несколько хостов или использовании другого контейнера. –