欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用MultipartFile实现文件上传功能

程序员文章站 2024-04-01 19:43:34
在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartupload实现文件上传,最近在工作中使用spring的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,现在就可以上传文件了,挺简单吧?这里我只列出了基本步骤,至于具体的操作(比如中文问题)可能就需要大家自己再完善完善了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。