I need to upload images in my project. How to get the upload path in SpringMVC. The path is;
/home/cme/project/eclipse/workspace_12_11/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/fileUploadTester/upload
The following error;
The method getServletContext() is undefined for the type HomePageController
appears when I use this code;
String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY;
My code is
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"); }
Three error
It's used to wire the configurations from Spring beans together and use them for the application. Use ApplicationContext if you want to retrieve the information of Spring beans. Use ServletContext if you want to get/set attribute those shared to all Servlet.
Use below code to autowire ServletContext
object in SpringMVC
@Autowired ServletContext context;
and after that try to execute your code like
String uploadPath = context.getRealPath("") + File.separator + UPLOAD_DIRECTORY;
You can get it in your controller like this;
private ServletContext context; public void setServletContext(ServletContext servletContext) { this.context = servletContext; }
but for this your controller must implement ServletContextAware
interface
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With