Spring 的文件上传 !(转载后编辑)!

本文详细介绍使用SpringMVC框架实现文件上传的具体步骤,包括配置web.xml、定义upload-servlet.xml、创建控制类及commandClass等,并提供index.jsp、confirmation.jsp及fail.jsp的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用spring MVC框架进行文件上传,步骤如下:

1:配置web.xml文件。定义DispatcherServlet,DispatcherServlet处理的请求(.htm)也在同一个web.xml文件里使用url-mapping定义映射。

 <servlet>
  <servlet-name>upload</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>upload</servlet-name>
  <url-pattern>*.htm</url-pattern>
 </servlet-mapping>


2:定义upload-servlet.xml文件。
<bean id='multipartResolver'
       <!-- set the max upload size100MB -->
        <property name='maxUploadSize'>
        <value>104857600</value>
    </property>
    <property name='maxInMemorySize'>
        <value>4096</value>
    </property>
   </bean>
 <bean id='urlMapping'
  
 <property name='mappings'>           
  <props>               
  <prop key='/upload.htm'>uploadController</prop>           
  </props>       
 </property>   
 </bean>
     <bean id='uploadController'   <property name='commandClass'><value>FileUploadBean</value></property>
      <property name='uploadDir'><value>E:/</value></property>
      <property name='formView'><value>fail</value></property>
  <property name='successView'><value>confirmation</value></property>
</bean>  


3:定义控制类,commandClass及方法。控制类中最重要的方法是initBinder()它给spring注册了一个编辑器对
request中的multipart实体进行处理,如果没有这个方法,上传将不能进行。
<--------------------------控制类------------------->
public class FileUploadController extends SimpleFormController {
    private static Log log =
        LogFactory.getLog(FileUploadController.class);
    private String uploadDir;//上传文件路径

    protected ModelAndView onSubmit(HttpServletRequest request,
            HttpServletResponse response, Object cmd, BindException errors)
            throws Exception {

            FileUploadBean bean = (FileUploadBean) cmd;
            byte[] bytes = bean.getFile();
          
            //cast to multipart file so we can get additional information
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile('file');

            String uploadDir = this.getUploadDir();

            File dirPath = new File(uploadDir);
            if (!dirPath.exists()) {
                dirPath.mkdirs();
            }
            String sep = System.getProperty('file.separator');
            if (log.isDebugEnabled()) {
                log.debug('uploading to: ' + uploadDir + sep +
                file.getOriginalFilename());
                }
            File uploadedFile = new File(uploadDir + sep
                    + file.getOriginalFilename());
            FileCopyUtils.copy(bytes, uploadedFile);
            System.out.println('********************************');
            System.out.println(uploadedFile.getAbsolutePath());
            System.out.println(bytes.length);
            System.out.println('********************************');
           
     
        return new ModelAndView(getSuccessView() + '.jsp');
    }

    protected void initBinder(HttpServletRequest request,
            ServletRequestDataBinder binder) throws ServletException {
        binder.registerCustomEditor(byte[].class,
                new ByteArrayMultipartFileEditor());
    } 

/*Fileform 中接受文件上传的属性的类型是byte数组,用户上传的文件可以通过org.springframework.web.multipart.support.BytearrayMuitipartFileEditor 转换为byte数组并设置给FileForm*/


    public void setUploadDir(String uploadDir){
        this.uploadDir = uploadDir;
    }
    public String getUploadDir(){
        return this.uploadDir;
    }
}
<--------------------------控制类------------------------->
<---------------------定义commandClass-------------------->
public class FileUploadBean {

    private byte[] file;

    public void setFile(byte[] file) {
        this.file = file;
    }

    public byte[] getFile() {
        return file;
    }

}
<---------------------定义commandClass-------------------->


4:定义一个form表单index.jsp
<form method='post' action='upload.htm' enctype='multipart/form-data'>
<input type='file' name='file'/>
<input type='submit'/>


5:定义confirmation.jsp及fail.jsp
confirmation.jsp如下:
<%@ page contentType='text/html; charset=GBK' %>
<html>
<head>
<title>
successView
</title>
</head>
<body bgcolor='#ffffff'>
<h1>
Upload Successful
</h1>
</body>
</html>

fail.jsp如下:
<html>
<head>
<title>Upload a file please</title>
</head>
<body>
<h1>no file,Please upload a file</h1>
<form method='post' action='uploadfile.htm' enctype='multipart/form-data'>
<input type='file' name='file'/>
<input type='submit'/>
</form>
</body>
</html>


6:运行tomcat。
预览 ie里面:http://localhost/springmvc/index.jsp
注:
a:文件目录为tomcat-HOME/webapps/springmvc/
.jsp文件都放在根目录下,.class文件放在/WEB-INF/classes/中

其他文件放在/WEB-INF/里面。
b:如果连上面的你都有疑问,那还是去看看spring的基础知识吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值