web-dev-qa-db-fra.com

comment obtenir getServletContext () dans spring mvc Controller

J'ai besoin de télécharger des images dans mon projet. Comment obtenir le chemin de téléchargement dans SpringMVC. Le chemin est;

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

L'erreur suivante

The method getServletContext() is undefined for the type HomePageController

apparaît lorsque j'utilise ce code;

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

Mon code est

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");
}

Trois erreur

  1. Cette méthode doit renvoyer un résultat de type ModelAndView
  2. La méthode setFileSizeMax (int) n'est pas définie pour le type ServletFileUpload.
  3. La méthode getServletContext () n'est pas définie pour le type Contrôleur de page d'accueil
40
Priyanka Shaju
  1. Utilisez le code ci-dessous pour autowire l'objet ServletContext dans SpringMVC

    @Autowired
    ServletContext context; 
    

    et après cela, essayez d'exécuter votre code comme

    String uploadPath = context.getRealPath("") + File.separator + UPLOAD_DIRECTORY;
    
  2. Vous pouvez l'obtenir dans votre contrôleur comme ceci;

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

    mais pour cela votre contrôleur doit implémenter l'interface ServletContextAware

68
Nirav Prajapati

Essaye ça:

@Autowired
ServletContext servletContext;
20
Aleksey Bykov

Ceci est juste une autre alternative

((ServletRequestAttributes) RequestContextHolder.getRequestAttributes ()). GetRequest (). GetServletContext () 
12
user3502676

Les paramètres que vous avez transmis ou définis à l'objet ServletContext sont stockés dans l'objet HttpServletRequest. Vous pouvez y accéder n'importe où dans l'application de la manière suivante:

public void method(HttpServletRequest request){
    String email=request.getServletContext().getInitParameter(“email”);
}
1
Arun Raaj