美文网首页
java 用springMVC 和HttpServletRequ

java 用springMVC 和HttpServletRequ

作者: haiyong6 | 来源:发表于2018-09-21 17:33 被阅读0次

加入两个jar包,commons-fileupload-1.3.jar、commons-io-1.2.jar

jsp:

<form id="test" enctype="multipart/form-data" method="post"> 
    选择文件:<input data-role="none" type="file" name="file" width="120px">  
    <button data-role="none" onclick="testUpload();">测试</button>
</form>

js:

function testUpload(){
    var form = new FormData(document.getElementById("test"));
    var url = ctx + "/policy/saleIncentiveQuery/test.do";    //这里的“项目访问路径”要改为你自己的路径
    $.ajax({
        url : url,
        data : form,
        type : 'post',
        processData:false,
        contentType:false,
        success : function(data){
            alert("成功")
        },
        error : function(data){
            
        }
    });
}

方法一:用springMvc multipartResolver实现文件上传

1.在配置文件applicationContext.xml加上以下配置

<!-- 定义文件解释器(文件上传) -->  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
    <!-- 设置默认编码 -->  
    <property name="defaultEncoding" value="utf-8"></property>  
    <!-- 上传文件最大大小1M-->   
    <property name="maxUploadSize" value="1048576"></property>    
</bean>

2、Controller层写java代码

import java.io.File;
import java.io.IOException;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
 
 
@Controller
public class SaleIncentiveQueryController{

    @RequestMapping("/policy/saleIncentiveQuery/test.do")
    public String test(MultipartFile file,HttpServletRequest request) throws IOException{
        //上传路径
        String path = request.getSession().getServletContext().getRealPath("/upload");
        //获取上传文件名
        String fileName = file.getOriginalFilename();
        System.out.println("fileName>>"+fileName);
        File dirFile = new File(path, fileName);
        System.out.println("dir.exists()>>"+dirFile.exists());
        if(!dirFile.exists()){
            dirFile.createNewFile();
        }
        //MultipartFile自带的解析方法,transferTo(File file)方法其实是封装了下面的这些代码,我习惯自己写缓存输入输出流来处理
        //file.transferTo(dirFile);
        InputStream input = file.getInputStream();
        FileOutputStream output = new FileOutputStream(dirFile);
        byte[] bt = new byte[1024*1024];
        int len = 0;
        while((len = input.read(bt)) != -1) {
            output.write(bt, 0, len);
        }
        input.close();
        output.flush();
        output.close();
        
        return "ok";
    }
}

这样前台上传的文件就能上传到服务器指定目录下了,如果一次性上传多个,参数中就用MultipartFile[] 来接收,循环输入输出到指定路径就行了。

方法二:用ServletFileUpload实现文件上传
说明:上面的方法一springMVC其实是重新处理了HttpServletRequest request,源码中实际上就是用ServletFileUpload实现的文件上传
下面直接用ServletFileUpload实现文件上传
1.首先把上面在配置文件applicationContext.xml加上的配置删掉
2.Controller层写java代码

@RequestMapping("/policy/saleIncentiveQuery/test.do")
public String test( HttpServletRequest request){
  try {
            DiskFileItemFactory factory = new DiskFileItemFactory();  
            // 设置缓冲区大小,这里是4kb
            factory.setSizeThreshold(4096);  
            ServletFileUpload upload = new ServletFileUpload(factory);  
            // 解决文件名称乱码
            upload.setHeaderEncoding("utf-8");
            // 设置最大文件尺寸,这里是10MB
            upload.setSizeMax(10485760);
            String path = request.getSession().getServletContext().getRealPath("/upload");
            
            List<FileItem> itemsList = upload.parseRequest(request);
            for(int i = 0; i < itemsList.size(); i++) {
                FileItem  fileItem = itemsList.get(i);
                String fileName = fileItem.getFieldName();
                File dirFile = new File(path, fileName);
                System.out.println("dir.exists()>>"+dirFile.exists());
                if(!dirFile.exists()){
                    dirFile.createNewFile();
                }
                System.out.println("dir.exists()>>"+dirFile.exists());
                InputStream inputStream = fileItem.getInputStream();
                FileOutputStream outputStream = new FileOutputStream(dirFile);
                int len = 0;
                byte[] bt = new byte[1024*1024]; 
                while((len = inputStream.read(bt)) != -1) {
                    outputStream.write(bt, 0, len);
                }
                inputStream.close();
                outputStream.flush();
                outputStream.close();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

相关文章

网友评论

      本文标题:java 用springMVC 和HttpServletRequ

      本文链接:https://www.haomeiwen.com/subject/hjdnnftx.html