2010-01-14 48 views
12

Tôi đang cố gắng viết tệp nhiều phần đã tải lên lên hệ thống tệp. Tôi có một thư mục được gọi là âm thanh nằm trong thư mục gốc của ứng dụng web của tôi (không phải bên trong WEB-INF, nhưng bên cạnh nó, nó có thể truy cập công khai như css và javascript).Tải xuống ứng dụng web gốc từ Bộ điều khiển Spring

Tôi muốn ghi tệp đã tải lên vào thư mục đó nhưng dường như tôi không nhận được đường dẫn mà tôi cần. Tôi nghĩ rằng nhận được một ServletContext() sau đó sử dụng realPath() có thể làm việc, nhưng tôi không có một tham chiếu đến ServletContext thông qua một bộ điều khiển Spring. Thanks cho bất kỳ hep

@RequestMapping(value="/uploadSample") 
public ModelAndView upload(HttpServletRequest request, HttpServletResponse response, @RequestParam("file") MultipartFile f) { 

    if (f == null) { 
     return new ModelAndView("upload", "msg", "The file is null."); 
    } 
    try { 
     // I need to set AUDIO_PATH to <webAppRoot>/audio 
     FileOutputStream file = new FileOutputStream(AUDIO_PATH + "/" + f.getOriginalFilename()); 
     file.write(f.getBytes()); 
     file.close(); 
    } 
    catch (FileNotFoundException ex) { 
     Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    catch (IOException ex) { 
      Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex); 
    } 



    return new ModelAndView("upload", "msg", "File (" + f.getOriginalFilename() + ") successfully uploaded."); 
} 

}

+0

Cảm ơn bạn đã đặt câu hỏi này, nó khá hữu ích vì tôi cũng gặp vấn đề này. – MetroidFan2002

Trả lời

11

Tôi nghĩ nhận được một ServletContext() sau đó sử dụng realpath() có thể làm việc, nhưng tôi không có một tham chiếu đến ServletContext

Có bạn làm. Xem HttpServletRequest.getSession().getServletContext()

+0

hoàn hảo, điều này giải quyết mọi thứ cho tôi. Cảm ơn. –

+4

Điều này sẽ không hoạt động, tuy nhiên, nếu bạn không có phiên và muốn duy trì trạng thái vô phiên. Xem câu trả lời từ axtavt. – Paul

26

Để có được tham chiếu đến ServletContext, lớp học của bạn có thể thực hiện ServletContextAware

EDIT:ServletContext cũng có thể truy cập vào các thùng chứa ứng dụng web dưới tên đậu servletContext, vì vậy bạn có thể tiêm nó giống như bất kỳ bean khác trong Mùa xuân.

+0

gọn gàng, tôi không biết có một hạt đậu cho việc này. cảm ơn. –

+1

Đây là câu trả lời hay hơn. Nó hoạt động ngay cả khi bạn không có một phiên, và tiêm phụ thuộc là cách Spring sau khi tất cả. – Paul

+0

không hoạt động. trong trường hợp tôi không ở trong một servlet ... tôi nhận được đối tượng "context", nhưng getContextPath trả về null. – OhadR

0

Nhận url máy chủ bằng cách sử dụng ServletContext không an toàn trên các môi trường khác nhau.

Sẽ tốt hơn nếu truy xuất url từ tệp thuộc tính.

Các vấn đề liên quan