• 利用MultipartFile实现文件上传


    利用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="300px;"></td>
        
    </tr>
        
    <tr align="center" valign="middle">
            
    <td height="60" colspan="2"><input type="submit" ID="BtnOK" value="确认上传"></td>
        
    </tr>
    </form>    

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

  • 相关阅读:
    python_捕获异常
    requests二次封装_捕获异常
    python_flask模块
    python_redis模块
    python_requests模块
    使用pstack和gdb调试死锁
    如何编写go代码
    GDB调试命令手册
    core文件相关
    shared_ptr的线程安全性
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330252.html
Copyright © 2020-2023  润新知