java mvc 上传文件_springMVC实现文件的上传和下载

本文介绍了在SpringMVC中如何高效地通过流操作实现文件上传与下载,包括使用CommonsMultipartFile、自定义上传方法、以及两种上传方式的性能对比。重点讲解了通过`@RequestParam`处理文件上传,和利用Spring提供的MultipartResolver简化流程。
摘要由CSDN通过智能技术生成

在springMVC中,可以通过流的方式进行文件的上传和下载,也可以通过springMVC自己提供的方式

首先要加两个包 common.io和common-fileupload这两个jar包

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

随后是在mvc-dispatcher-servlet中 配置相关的id属性

这里配置的是文件上传时候的最大值 和编码格式等

随后记住要在web,xml中的url-pattern中改掉过滤路径为"/"否则系统会匹配不到

随后是前端页面的编码 只是一个简单的jsp界面的编写

采用流的方式上传文件

这里指定这个form发生的动作 要制定为项目名下的动作 并且method要配置为post type也要设置好

随后便是核心代码块的编写 首先是以流的形式进行下载

@RequestMapping("/fileUpload")

public String fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException{

//用来检测程序运行的时间

long startTime = System.currentTimeMillis();

System.out.println("fileName:" + file.getOriginalFilename());

try{

OutputStream os=new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());

//获取输入流

InputStream is = file.getInputStream();

int temp;

//一个一个字节的读入

while((temp = is.read()) != -1){

os.write(temp);

}

os.flush();

os.close();

is.close();

System.out.println("success");

}

catch(FileNotFoundException e){

e.printStackTrace();

}

long endTime=System.currentTimeMillis();

System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");

return "success";

}这种方式的话 上传的时间比较慢

第二种 也是推荐使用的是用springMVC提供的上传方式

//采用spring提供的上传文件的方法

@RequestMapping("/springUpload")

public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException{

long startTime = System.currentTimeMillis();

//将当前上下文初始化给 commonMutipartResover (多部分解析器)

CommonsMultipartResolver mutipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

//检查form中是否有ecctype = "mutipart/form-data

if(mutipartResolver.isMultipart(request)){

//将request变成多部分request

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;

//获取mutiRequest中所有的文件名

Iterator iter = multiRequest.getFileNames();

while(iter.hasNext()){

//一次遍历所有的文件

MultipartFile file = multiRequest.getFile(iter.next().toString());

if(file != null){

//进行上传

String path = "/home/ubuntu/img/"+new Date().getTime() + file.getOriginalFilename();

file.transferTo(new File(path));

}

}

}

long endTime=System.currentTimeMillis();

System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");

return "success";

}随后便可在前端界面进行上传文件的操作

详情可见这个网站

http://www.cnblogs.com/fjsnail/p/3491033.html

文件下载的方法

先指定路径 也是采用流的方法进行下载 实际上可以不用设置头信息

//文件下载

@RequestMapping("/download")

public void downLoad(HttpServletResponse res){

//文件的目录

String path = "/home/ubuntu/img/" + "img1.jpg";

File file = new File(path);

//如果文件存在的话

if(file.exists()){

res.setContentType("application/jpg");

res.addHeader("Content-Disposition","attachment;filename=img1.jpg");

byte buffer[] = new byte[1024];

FileInputStream fis = null;

BufferedInputStream bis = null;

try{

fis = new FileInputStream(file);

bis = new BufferedInputStream(fis);

OutputStream os = res.getOutputStream();

int i = bis.read(buffer);

while(i != -1){

os.write(buffer,0,i);

i = bis.read(buffer);

}

}

catch(IOException e){

System.out.println("error");

}

finally{

if (bis != null) {

try {

bis.close();

} catch (IOException e) {

}

}

if (fis != null) {

try {

fis.close();

} catch (IOException e) {

}

}

}

}

} 大致就是这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值