內圖像我想上傳圖片文件到文件夾/ Web應用程序/照片/使用ServletContext的照片,但我每次得到NullPointerException異常如何上傳WebApp文件夾
我如何做正確?
這裏是UploadFile.class,其中NPE在CONTAINER_ROOT變量上上升。
@Component
public class UploadFile {
@Autowired
HttpServletRequest httpServletRequest;
private String CONTAINER_ROOT = httpServletRequest.getSession().getServletContext().getRealPath("/");
private String DIR_NAME = "foto";
private String UPLOAD_DIR = CONTAINER_ROOT + File.separator + DIR_NAME;
private Logger logManager = LogManager.getLogger(this.getClass());
public String getUploadedPath(MultipartFile file) {
return upload(file);
}
private String upload(MultipartFile file) {
if (!file.isEmpty()) try {
byte[] bytes = file.getBytes();
String fileName = file.getOriginalFilename();
File dir = new File(UPLOAD_DIR);
if (!dir.exists()) dir.mkdirs();
File fileOnServer = new File(dir.getAbsolutePath() + File.separator + fileName);
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(fileOnServer));
outputStream.write(bytes);
outputStream.close();
logManager.warn("UPLOADED FILE LOCATION: " + fileOnServer.getAbsolutePath());
return fileOnServer.getPath();
}
catch (IOException e) {
logManager.error("Error trying to upload file to location, or file is empty!", e.getMessage());
}
return null;
}
}
這是我控制器上如何使用:
Foto savedFoto = this.fotoRepository.save(new Foto(this.uploadFile.getUploadedPath(file), savedImovel));
堆棧跟蹤:
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.agenciadsw.morenoimoveis.util.UploadFile]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164)
28-Aug-2014 11:02:16.409 WARNING [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.loader.WebappClassLoader.clearReferencesJdbc The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
... 71 more
Caused by: java.lang.NullPointerException
at br.com.agenciadsw.morenoimoveis.util.UploadFile.<init>(UploadFile.java:26)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
... 73 more
這裏web.xml
:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>MorenoImoveis</display-name>
<servlet>
<servlet-name>dispacher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
br.com.agenciadsw.morenoimoveis.cfg.PersistenceConfigurer
br.com.agenciadsw.morenoimoveis.cfg.SecurityConfigurer
br.com.agenciadsw.morenoimoveis.cfg.WebMvcConfigurer
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispacher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
br.com.agenciadsw.morenoimoveis.cfg.PersistenceConfigurer
br.com.agenciadsw.morenoimoveis.cfg.SecurityConfigurer
br.com.agenciadsw.morenoimoveis.cfg.WebMvcConfigurer
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
我得到一個消息'致:java.lang.IllegalStateException:沒有線程綁定請求中找到:你是指請求屬性之外的實際Web請求,或處理最初接收線程之外的請求?如果您實際上在Web請求中操作並仍然收到此消息,則代碼可能在DispatcherServlet/DispatcherPortlet之外運行:在這種情況下,請使用RequestContextListener或RequestContextFilter來公開當前請求。「@Scope(」session「)或@Scope(「請求」) – 2014-08-28 14:32:24
你使用Spring DispatcherServlet嗎?如果沒有,您必須在web.xml中啓用RequestContextListener或RequestContextFilter(在此處查找示例:http://www.theserverside.com/tutorial/How-to-Use-Spring-30-In-a-Servlet基於Web的應用程序),否則您的請求或會話範圍的bean無法訪問Spring ApplicationContext。 – dunni 2014-08-28 14:34:40
是的我已經聲明瞭,我用完整的web.xml編輯了帖子我添加了像教程這樣的Filter,但沒有任何反應 – 2014-08-28 14:40:09