springMVC框架中的文件上传

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

1:配置web.xml文件。定义DispatcherServletDispatcherServlet处理的请求(.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"

    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

        <!-- set the max upload size100MB -->

    <property name="maxUploadSize">

       <value>104857600</value>

    </property>

    <property name="maxInMemorySize">

        <value>4096</value>

    </property>

 </bean>

 <bean id="urlMapping"

    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

    <property name="mappings">

       <props>

           <prop key="/upload.htm">uploadController</prop>

       </props>

    </property>

 </bean>

 <bean id="uploadController" class="FileUploadController">

    <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实体进行处理,如果没有这个方法,上传将不能进行。
//控制类

publicclass FileUploadController extends SimpleFormController {

    privatestatic 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
//
HttpServletRequest转型为MultipartHttpServletRequest
//从而能得到文件名和文件内容

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

        CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("file");

//定义文件存放路径

        String uploadDir = this.getUploadDir();

        File dirPath = new File(uploadDir);

        if (!dirPath.exists()) {

            dirPath.mkdirs();

        }

//确认系统的文件路径分隔符(dos系统是“ unix系统是“/”)

        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());//这里从file中取出文件名

        FileCopyUtils.copy(bytes, uploadedFile); //拷贝指定的文件流

        System.out.println("********************************");

        System.out.println(uploadedFile.getAbsolutePath());

        System.out.println(bytes.length);

        System.out.println("********************************");

        returnnew ModelAndView(getSuccessView() + ".jsp");

    }

   

    protectedvoid initBinder(HttpServletRequest request,

            ServletRequestDataBinder binder) throws ServletException {

        binder.registerCustomEditor(byte[].class,

                new ByteArrayMultipartFileEditor());

    }

   

    publicvoid setUploadDir(String uploadDir){

        this.uploadDir = uploadDir;

    }

    public String getUploadDir(){

        returnthis.uploadDir;

    }

}

//控制类

还要定义一个commandClass

publicclass FileUploadBean {

    privatebyte[] file;

    publicvoid setFile(byte[] file) {

        this.file = file;

    }

    publicbyte[] getFile() {

        returnfile;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值