java request 文件_java 用springMVC 和HttpServletRequest 两种实现文件上传的方法

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

jsp:

选择文件:

测试

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加上以下配置

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 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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值