利用MultipartFile实现文件上传

    技术2022-05-11  84

    利用MultipartFile实现文件上传

             在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的MultipartFile实现文件上传,感觉挺简单,在这里和大家分享一下.

    一.主要有两个java类,和一般的servlet放在一起即可.

    1.FileUploadBean.java

    package  chb.demo.web; import  org.springframework.web.multipart.MultipartFile; /** * @author chb * */ public   class  FileUploadBean  {    private MultipartFile file;    public void setFile(MultipartFile file) {        this.file = file;    }    public MultipartFile getFile() {        return file;    }}

    2.FileUploadController.java

    package  chb.demo.web; import  java.io.FileOutputStream; import  java.io.IOException; import  java.io.InputStream; import  javax.servlet.http.HttpServletRequest; import  javax.servlet.http.HttpServletResponse; import  org.springframework.validation.BindException; import  org.springframework.web.multipart.MultipartFile; import  org.springframework.web.servlet.ModelAndView; import  org.springframework.web.servlet.mvc.SimpleFormController; /** * @author chb * */ public   class  FileUploadController  extends  SimpleFormController  {            protected ModelAndView onSubmit(        HttpServletRequest request,        HttpServletResponse response,        Object command,        BindException errors){                try        {            // cast the bean            FileUploadBean bean = (FileUploadBean) command;            // let's see if there's content there            MultipartFile file = bean.getFile();                                           if (file == null{                throw new Exception("上传失败:文件为�空");                }            if(file.getSize()>10000000)                    {                throw new Exception("上传失败:文件大小不能超过10M");                        }            //得到文件�名            String filename=file.getOriginalFilename();                                if(file.getSize()>0){                                try {                    SaveFileFromInputStream(file.getInputStream(),"D:/",filename);                } catch (IOException e) {                    System.out.println(e.getMessage());                    return null;                }            }            else{                throw new Exception("上传失败:上传文件不能为�空");            }            // well, let's do nothing with the bean for now and return:            try {                return super.onSubmit(request, response, command, errors);                            } catch (Exception e) {                System.out.println(e.getMessage());                return null;            }        }        catch(Exception ex)        {            System.out.println(ex.getMessage());            return null;        }    }           /**保存文件     * @param stream     * @param path     * @param filename     * @throws IOException     */    public void SaveFileFromInputStream(InputStream stream,String path,String filename) throws IOException    {              FileOutputStream fs=new FileOutputStream( path + "/"+ filename);        byte[] buffer =new byte[1024*1024];        int bytesum = 0;        int byteread = 0;         while ((byteread=stream.read(buffer))!=-1)        {           bytesum+=byteread;           fs.write(buffer,0,byteread);           fs.flush();        }         fs.close();        stream.close();          }       }

    二.配置文件中如下配置:

    1.web.xml,利用spring mvc模式,大家应该都很熟悉了

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

    2.chb-servlet.xml,这里要配置映射,并可以设定最大可上传文件的大小

    <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > < beans >      <!--  Multi-Action 用来标识method的变量名定义 -->      < bean  id ="methodNameResolver"  class ="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver" >          < property  name ="paramName" >              < value > action </ value >          </ property >          < property  name ="defaultMethodName" >              < value > index </ value >          </ property >      </ bean >          < 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 ="10000000" />      </ bean >          < bean  id ="handlerMapping"  class ="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >          < property  name ="mappings" >            < props >              < prop  key ="/upload.do" > fileUploadController </ prop >            </ props >          </ property >      </ bean >          < bean  id ="fileUploadController"  class ="chb.demo.web.FileUploadController" >          < property  name ="commandClass"  value ="chb.demo.web.FileUploadBean" />          <!--  上传失败时跳转页面  -->          < property  name ="formView"  value ="/user/err.jsp" />          <!--  上传成功时跳转页面  -->           < property  name ="successView"  value ="/user/confirmation.jsp" />     </ bean > </ beans >

    三.设定jsp页面

      < form  id ="form1"  method ="post"  action ="upload.do"  enctype ="multipart/form-data" >                      < tr >          < td  width ="25%"  align ="right" > 上传文件: </ td >          < td >< input  id ="file"  type ="file"  NAME ="file"  style ="width:300px;" ></ td >      </ tr >      < tr  align ="center"  valign ="middle" >          < td  height ="60"  colspan ="2" >< input  type ="submit"  ID ="BtnOK"  value ="确认上传" ></ td >      </ tr > </ form >     

              ok,现在就可以上传文件了,挺简单吧?这里我只列出了基本步骤,至于具体的操作(比如中文问题)可能就需要大家自己再完善完善了.

     


    最新回复(0)