2011-02-04 2 views
3

Как я могу служить файлом изображения в файловой системе из сервлета?Служить статический файл изображения из файловой системы в сервлет?

+1

Какой сервер приложений? Некоторые предлагают простой способ определить веб-приложение для публикации статического контента, например weblogic: http://blogs.oracle.com/middleware/2010/06/publish_static_content_to_weblogic.html – RealHowTo

+1

И Tomcat: http://stackoverflow.com/questions/1502841/secure-data-serve/2662603 # 2662603 – BalusC

ответ

2

Ознакомиться здесь: Example Depot: Returning an Image in a Servlet Ссылка сломана. Вайбак машина копия вставляется ниже:

// This method is called by the servlet container to process a GET request. 
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
    // Get the absolute path of the image 
    ServletContext sc = getServletContext(); 
    String filename = sc.getRealPath("image.gif"); 

    // Get the MIME type of the image 
    String mimeType = sc.getMimeType(filename); 
    if (mimeType == null) { 
     sc.log("Could not get MIME type of "+filename); 
     resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
     return; 
    } 

    // Set content type 
    resp.setContentType(mimeType); 

    // Set content size 
    File file = new File(filename); 
    resp.setContentLength((int)file.length()); 

    // Open the file and output streams 
    FileInputStream in = new FileInputStream(file); 
    OutputStream out = resp.getOutputStream(); 

    // Copy the contents of the file to the output stream 
    byte[] buf = new byte[1024]; 
    int count = 0; 
    while ((count = in.read(buf)) >= 0) { 
     out.write(buf, 0, count); 
    } 
    in.close(); 
    out.close(); 
} 
+0

работает на моем сайте, но мы получаем около 15 миллионов просмотров страниц в месяц, поэтому ему нужна некоторая оптимизация – sadgas

+0

Эй, айоое, ваша ссылка сейчас сломана, что означает, что этот ответ потерял все использовать. ': (' –

+0

Спасибо Matt. Было бы неплохо, если бы у SO была служба для уведомления авторов, если/когда их ссылки сломаются. Хеч, почему бы не добавить кэш каждой связанной с ней веб-страницы. – aioobe

0

Ну это вроде стыда, что сервлет спецификации не имеет четкого способа сделать это, если изображение не находится под WebAPP реж. Контейнеры сервлетов обычно не советуют использовать их собственные способы. Очевидно, контейнер должен сделать это, чтобы обслуживать файлы, почему он не раскрывает функциональность? Почему не HttpServletResponse.sendFile(File)?

Ваш лучший выбор - создать символические ссылки, чтобы ваши файлы отображались в каталоге webapp.

Смежные вопросы