2014-11-14 3 views
31

Мне нужно загрузить изображения в свой проект. Как получить путь загрузки в SpringMVC. Путь:Как получить getServletContext() в Spring mvc Контроллер

/home/cme/project/eclipse/workspace_12_11/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/fileUploadTester/upload 

Следующая ошибка;

The method getServletContext() is undefined for the type HomePageController 

появляется, когда я использую этот код;

String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; 

Мой код

public ModelAndView UploadPhoto(@ModelAttribute User user, HttpServletRequest request, HttpServletResponse response) throws IOException { 
final String UPLOAD_DIRECTORY = "upload"; 
final int THRESHOLD_SIZE = 1024 * 1024 * 3; // 3MB 
final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB 
final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB 

String value[] = new String[10]; 
int i = 0; 

// checks if the request actually contains upload file 
if (!ServletFileUpload.isMultipartContent(request)) { 
    PrintWriter writer = response.getWriter(); 
    writer.println("Request does not contain upload data"); 
    writer.flush(); 
    return; //here is error This method must return a result of type ModelAndView 
} 

DiskFileItemFactory factory = new DiskFileItemFactory(); 
factory.setSizeThreshold(THRESHOLD_SIZE); 
factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); 

ServletFileUpload upload = new ServletFileUpload(factory); 
upload.setFileSizeMax(MAX_FILE_SIZE); //here error The method setFileSizeMax(int) is undefined for the type ServletFileUpload 
upload.setSizeMax(MAX_REQUEST_SIZE); 
String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; // here error The method getServletContext() is undefined for the type Homepage Controller 
// creates the directory if it does not exist 
File uploadDir = new File(uploadPath); 
if (!uploadDir.exists()) { 
    uploadDir.mkdir(); 
} 

try { 
    List <FileItem> items = upload.parseRequest(request); // request is HttpServletRequest 
    for (FileItem item: items) { 
    if (item.isFormField()) { // text fields, etc... 
    String fieldName = item.getFieldName(); 
    System.out.print("fieldname" + fieldName); 
    value[i] = item.getString(); 
    System.out.print("from uploader" + value[i]); 
    i++; 
    } else { 
    //String fileName=new File(item.getName()).getName(); Use this to use default file name 
    String name = value[0]; 
    System.out.println("file uploader name" + name); 
    String filePath = uploadPath + File.separator + name; 
    System.out.println(filePath); 
    File storeFile = new File(filePath); 
    try { 
    item.write(storeFile); 
    } catch (Exception ex) { 
    } 
    } 
    } 
    System.out.println("uploaded successfully"); 
} catch (Exception ex) { 
    System.out.println("error not uploaded"); 
} 
return new ModelAndView("ChangePhoto"); 
} 

Три ошибки

  1. Этот метод должен возвращать результат типа ModelAndView
  2. Метод setFileSizeMax (целое) не определено для типа ServletFileUpload
  3. Метод getServletContext() не определен для типа Домашняя страница Contro Мюллером

ответ

52
  1. Использование ниже кода autowire ServletContext объект в SpringMVC

    @Autowired 
    ServletContext context; 
    

    и после этого попытаться выполнить ваш код

    String uploadPath = context.getRealPath("") + File.separator + UPLOAD_DIRECTORY; 
    
  2. Вы можете получить его в своем контроллере следующим образом;

    private ServletContext context; 
    
    public void setServletContext(ServletContext servletContext) { 
        this.context = servletContext; 
    } 
    

    но для этого контроллера должен реализовать интерфейс ServletContextAware

13

Попробуйте это:

@Autowired 
ServletContext servletContext; 
8

Это просто еще одна альтернатива

((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getServletContext() 
Смежные вопросы