在springMVC中,可以通过流的方式进行文件的上传和下载,也可以通过springMVC自己提供的方式
首先要加两个包 common.io和common-fileupload这两个jar包
随后是在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) {
}
}
}
}
} 大致就是这样