Java 使用springmvc上传文件

Java 使用springmvc上传文件,java,spring-mvc,file-upload,Java,Spring Mvc,File Upload,更新:我观察到传递空值的原因是enctype=“multipart/form data”,但需要该部分才能将文件传递给控制器。以下问题仍然存在 我一直在尝试设置一个SpringMVC页面,允许用户上传文档。我环顾四周,似乎对如何实现这一点(使用“commons fileupload”和“commons io”)有了一个大致的想法,下面是我的视图、控制器和模型 视图: 型号: public class UploadForm { private CommonsMultipartFile file

更新:我观察到传递空值的原因是
enctype=“multipart/form data”
,但需要该部分才能将文件传递给控制器。以下问题仍然存在


我一直在尝试设置一个SpringMVC页面,允许用户上传文档。我环顾四周,似乎对如何实现这一点(使用“commons fileupload”和“commons io”)有了一个大致的想法,下面是我的视图、控制器和模型

视图:

型号:

public class UploadForm {

private CommonsMultipartFile fileData;

public CommonsMultipartFile getFileData() {
    System.out.println("REACHED GET METHOD");
    return fileData;
}
public void setFileData(CommonsMultipartFile fileData) {
    System.out.println("REACHED SET METHOD");
    this.fileData = fileData;
}
}

我对Spring和MVC都是新手,但我正在慢慢掌握窍门。这里的问题是,实际上我正在输入控制器的
公共字符串创建(@Valid UploadForm UploadForm,bindingsult result)
方法,但是UploadForm被作为一个空值传递,我不能,就我的一生而言,弄清楚它,这让人非常沮丧。任何帮助或提示都将不胜感激。谢谢

这是使用多部分/表单数据实现的

<form:form id="" action="xxx.do" method="post"
      modelAttribute="uploadFile"  enctype="multipart/form-data">  
<form:input path="data" id="data" type="file" />
</form:form>
在控制器中

@RequestMapping(value = "/upload", method = RequestMethod.POST)  
public ModelAndView fileUpload(uploadFile fileuploaded,
                               BindingResult result, 
                               HttpSession session){
                       ...
}
读文件

BufferedReader br = new BufferedReader(
new InputStreamReader(fileuploaded.getFileData().getInputStream()));

这是使用多部分/表单数据实现的

<form:form id="" action="xxx.do" method="post"
      modelAttribute="uploadFile"  enctype="multipart/form-data">  
<form:input path="data" id="data" type="file" />
</form:form>
在控制器中

@RequestMapping(value = "/upload", method = RequestMethod.POST)  
public ModelAndView fileUpload(uploadFile fileuploaded,
                               BindingResult result, 
                               HttpSession session){
                       ...
}
读文件

BufferedReader br = new BufferedReader(
new InputStreamReader(fileuploaded.getFileData().getInputStream()));

在servlet.xml中,您必须添加:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- one of the properties available; the maximum file size in bytes -->
    <property name="maxUploadSize" value="100000"/>
</bean>

在servlet.xml中,您必须添加:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- one of the properties available; the maximum file size in bytes -->
    <property name="maxUploadSize" value="100000"/>
</bean>

index.jsp
Emp.java
包com.javatpoint;
导入java.io.BufferedOutputStream;
导入java.io.File;
导入java.io.FileOutputStream;
导入javax.servlet.ServletContext;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.HttpSession;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.ModelAttribute;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RequestParam;
导入org.springframework.web.multipart.commons.commons多部分文件;
导入org.springframework.web.servlet.ModelAndView;
@控制器
公共类HelloController{
私有静态最终字符串UPLOAD_DIRECTORY=“/images”;
@请求映射(“上传表单”)
public ModelAndView uploadForm(){
返回新的ModelAndView(“上传表单”);
}  
@RequestMapping(value=“savefile”,method=RequestMethod.POST)
public ModelAndView saveimage(@RequestParam commonmultipartfile文件,
HttpSession(会话)引发异常{
ServletContext=session.getServletContext();
String path=context.getRealPath(上传目录);
字符串文件名=file.getOriginalFilename();
System.out.println(路径+“”+文件名);
byte[]bytes=file.getBytes();
BufferedOutputStream=新的BufferedOutputStream(新文件输出流(
新文件(path+File.separator+filename));
stream.write(字节);
stream.flush();
stream.close();
返回新的ModelAndView(“uploadform”、“filesuccess”、“File successfully saved!”);
}  
}  
web.xml
春天
org.springframework.web.servlet.DispatcherServlet
1.
春天
/  
spring-servlet.xml
这里,您需要为CommonsMultipartResolver创建一个bean。
uploadform.jsp
这里的表单必须是method=“post”和enctype=“multipart/form data”。
图像文件上传
文件上传示例-JavaTpoint
${filesuccess}
选择图像

index.jsp
Emp.java
包com.javatpoint;
导入java.io.BufferedOutputStream;
导入java.io.File;
导入java.io.FileOutputStream;
导入javax.servlet.ServletContext;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.HttpSession;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.ModelAttribute;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RequestParam;
导入org.springframework.web.multipart.commons.commons多部分文件;
导入org.springframework.web.servlet.ModelAndView;
@控制器
公共类HelloController{
私有静态最终字符串UPLOAD_DIRECTORY=“/images”;
@请求映射(“上传表单”)
public ModelAndView uploadForm(){
返回新的ModelAndView(“上传表单”);
}  
@RequestMapping(value=“savefile”,method=RequestMethod.POST)
public ModelAndView saveimage(@RequestParam commonmultipartfile文件,
HttpSession(会话)引发异常{
ServletContext=session.getServletContext();
String path=context.getRealPath(上传目录);
字符串文件名=file.getOriginalFilename();
System.out.println(路径+“”+文件名);
byte[]bytes=file.getBytes();
BufferedOutputStream=新的BufferedOutputStream(新文件输出流(
新文件(path+File.separator+filename));
stream.write(字节);
stream.flush();
stream.close();
返回新的ModelAndView(“uploadform”、“filesuccess”、“File successfully saved!”);
}  
}  
web.xml
春天
org.springframework.web.servlet.DispatcherServlet
1.
春天
/  
spring-servlet.xml
这里,您需要为CommonsMultipartResolver创建一个bean。
uploadform.jsp
这里的表单必须是method=“post”和enctype=“multipart/form data”。
图像文件上传