Сопоставление файла изображения с помощью контроллера Spring

#java #spring #spring-mvc

#java #spring #spring-mvc

Вопрос:

Есть ли какой-либо способ сопоставить файл изображения с помощью Spring controller? В моем приложении Spring я хочу сохранить изображения в каталоге src / main / resources (я использую maven) и получить к ним доступ с помощью такого метода:

 @RequestMapping(value="image/{theString}")
public ModelAndView image(@PathVariable String theString) {
    return new ModelAndView('what should be placed here?');
}
  

строка theString — это имя изображения (без расширения). При таком подходе я должен иметь возможность получать доступ к своим изображениям таким образом:

 /webapp/controller_mapping/image/image_name
  

Кто-нибудь может указать направление для этого?

Комментарии:

1. Вы можете вернуть, HttpEntity<byte[]> содержащий ваше изображение и необходимые заголовки. Изображение может быть получено getResourceAsStream методом classloader docs.oracle.com/javase/7/docs/api/java/lang /…

2. @KonstantinV. Салихов, это должен быть ответ, чтобы вы могли получить некоторые очки интернет-брауни.

Ответ №1:

Вы можете вернуться HttpEntity<byte[]> . Создайте новый экземпляр, предоставляющий массив байтов изображения и необходимые заголовки, такие как длина содержимого и тип mime, затем верните его из вашего метода. Байты изображения могут быть получены с помощью getResourceAsStream метода classloader.

Ответ №2:

Это работает для меня. Может потребоваться некоторая очистка, но это работает. Исключение ServiceException — это просто базовое исключение.

Удачи!

  package com.dhargis.example;

        import java.io.File;
        import java.io.IOException;

        import javax.servlet.ServletOutputStream;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;

        import org.apache.commons.io.FileUtils;
        import org.apache.log4j.Logger;
        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;




      @Controller  
      @RequestMapping("/image")  
      public class ImageController {

    	private static final Logger log = Logger.getLogger(ImageController.class);
    	
    	private String filestore = "C:\Users\dhargis";
    	
    	//produces = "application/octet-stream"
    	@RequestMapping(value = "/{filename:. }", method = RequestMethod.GET)
    	public void get( @PathVariable String filename,
    			HttpServletRequest request, 
    			HttpServletResponse response) {

    		log.info("Getting file "   filename);
    		try {
    			byte[] content = null;
    			File store = new File(filestore);
    			if( store.exists() ){
    				File file = new File(store.getPath() File.separator filename);
    				if( file.exists() ){
    					content = FileUtils.readFileToByteArray(file);
    				} else {
    					throw new ServiceException("File does not exist");
    				}
    			} else {
    				throw new ServiceException("Report store is required");
    			}
    			
    			ServletOutputStream out = response.getOutputStream();
    			out.write(content);
    	        out.flush();
    	        out.close();
    		} catch (ServiceException e) {
    			log.error("Error on get", e);
    		} catch (IOException e) {
    			log.error("Error on get", e);
    		}
    		
    	}

    }  
    

<!-- begin snippet: js hide: false -->