2014-11-14 50 views
31

Tôi cần tải lên hình ảnh trong dự án của mình. Cách tải đường dẫn tải lên trong SpringMVC. Đường dẫn là;cách lấy getServletContext() trong bộ điều khiển mvc mùa xuân

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

Lỗi sau;

The method getServletContext() is undefined for the type HomePageController 

xuất hiện khi tôi sử dụng mã này;

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

Mã của tôi là

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

Ba lỗi

  1. Phương pháp này phải trả về một kết quả của loại ModelAndView
  2. Phương pháp setFileSizeMax (int) là undefined cho các loại ServletFileUpload
  3. Phương thức getServletContext() không được xác định cho loại Trang chủ Contro ller

Trả lời

52
  1. Sử dụng mã dưới đây để autowire ServletContext đối tượng trong SpringMVC

    @Autowired 
    ServletContext context; 
    

    và sau đó cố gắng để thực thi mã của bạn như

    String uploadPath = context.getRealPath("") + File.separator + UPLOAD_DIRECTORY; 
    
  2. Bạn có thể nhận được nó trong bộ điều khiển của bạn như thế này;

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

    nhưng đối với điều khiển của bạn này phải thực hiện giao diện ServletContextAware

13

Hãy thử điều này:

@Autowired 
ServletContext servletContext; 
8

Đây chỉ là một sự thay thế

((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getServletContext() 
Các vấn đề liên quan