Spring实现文件上传

来源:互联网 发布:java中四舍五入的方法 编辑:程序博客网 时间:2024/05/21 05:56

Spring在使用文件上传需要在SpringMVC-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>  


我们首先实现跳转方式的文件上传

实例: *.jsp

 <form action="fileUpload" method="post" enctype="multipart/form-data">
        img:<input  type="file" name="img" /><br/>
        <input type="submit" value="上传" />
   </form>


fileUploadController.java

package controller;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


import javax.servlet.http.HttpServletRequest;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;


@Controller
public class FileUploadController {


@RequestMapping("/fileUpload")
    public String fileUpload(HttpServletRequest request,@RequestParam("img")MultipartFile file) throws IOException
    {
//如果在这里要实现多文件上传 ,就可以这样注解 :@RequestParam("img") List<MultipartFile> list,  那么在前端就有多个name为“img” 的file
    @SuppressWarnings("deprecation")
String path=request.getRealPath("file");
          
        InputStream is=file.getInputStream();    
     
    OutputStream os=new FileOutputStream(new File(path,file.getOriginalFilename()));
   
    byte[] buffer=new byte[400];
   
    int length=0;
   
    while(-1!=(length=is.read(buffer)))
    {
    os.write(buffer);
    System.out.println(buffer+"----------------");
    }
   
    is.close();
    os.close();
   
    return "fileOk";
    }
}


2 . 使用$.ajaxFileUpload实现不跳转页面的文件上传

 此时,我们需要使用jquery.js和ajaxfileupload.js两个文件

实例:

      <script type="text/javascript" src="source/jquery.js"></script>
     <script type="text/javascript" src="source/ajaxfileupload.js"></script>
      <script type="text/javascript">
         function fileUpload() {
           $.ajaxFileUpload({
                url:"ajaxfileUpload",
                secureuri:false,  
                type:"POST",
                fileElementId:"file",
                dataType:"json",
                success:function(data)
                {
                     alert(data.result);
                },
                error:function()
                {
                  alert("上传失败");
                }
           
           });
           
           return false;
         }

      </script>

  </head>
  
  <body>
    <form action="" method="post" enctype="multipart/form-data">
       <input type="file" name="file" id="file"/><br/>
       <input type="button" value="upload" onclick="return fileUpload();"/>
    </form>
  </body>


在这里需要注意,我们使用两个静态的外部资源文件 ,就需要在SpringMVC-Servlet.xml 中配置

<mvc:resources location="/source/*" mapping="/source/**"/>


AjaxFileUploadController.java

import java.io.File;
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.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class AjaxFileUpload {
   
//@ResponseBody
@RequestMapping(value="/ajaxfileUpload")
public String fileUpload(@RequestParam("file") MultipartFile file,HttpServletRequest req,HttpServletResponse resp) throws IOException
{

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

System.out.println(file.getOriginalFilename());

InputStream is=null;
FileOutputStream os=null;
try {
is=file.getInputStream();

String path=req.getSession().getServletContext().getRealPath("file");

os=new FileOutputStream(new File(path,file.getOriginalFilename()));

byte[] buffer=new byte[400];

int length=0;

while(-1!=(length=is.read(buffer)))
{
os.write(buffer);
System.out.println(new String(buffer));
}
} catch (IOException e) {
e.printStackTrace();
}
 
 is.close();
 os.close();
     
 resp.getWriter().println("{\"result\":\"fileUploadOk\"}");
 
 return null;
// return "{\"result\":\"fileUploadOk\"}";

}

}



我们从以上两个实例看出在接受文件时,使用的时MultipartFile直接来接受,其实我们还可以使用MultipartHttpServletRequest来处理,通过将HttpServletRequest来cast to MultipartHttpServetRequest

即:HttpServletRequest request=.....

MultipartHttpServletRequest mhr=(MultipartHttpServletRequest)request;

然后使用:  mhr.getFile() 获得MultipartFile

                   mhr.getFiles()获得List<MultipartFile>






2 0
原创粉丝点击