采用springmvc架构,只贴出关键代码,其他一概论之。

上传:

jsp页面

1
2
3
4
5
<form  action= "${pageContext.request.contextPath}/UploadHandleServlet"   method= "post"   enctype= "multipart/form-data" >
    上传用户x:<input type= "text"  name= "username" ><br/>
          上传文件1:<input type= "file"  name= "file1" ><br/>
        <input type= "submit"  value= "提交" >
   </form>


后台代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
SimpleDateFormat sdf1 =  new  SimpleDateFormat( "yyyyMMddHHmmss" );
String savePath =request.getSession().getServletContext().getRealPath( "/WEB-INF/upload" );
  File file =  new  File(savePath);
  if  (!file.exists()) {
      file.mkdir();
  }
  String message = "" ;
  try {
       DiskFileItemFactory factory =  new  DiskFileItemFactory();
       factory.setSizeThreshold( 1024 * 100 ); 
       factory.setRepository(file);
       
       ServletFileUpload upload =  new  ServletFileUpload(factory);
       upload.setHeaderEncoding( "UTF-8" ); 
  List<FileItem> list = upload.parseRequest(request);
  
//正则匹配,过滤路径取文件名  
  String regExp =  ".+\\\\(.+)$"
  Pattern p = Pattern.compile(regExp);
  
  String fileName= "" ;
  for (FileItem item : list){
      if (item.isFormField()){
          String name = item.getFieldName();
          String value = item.getString( "UTF-8" );
          System.out.println(name +  "="  + value);
      } else {
          String name = item.getName(); 
          name = name.substring(name.lastIndexOf( "\\" )+ 1 );
           fileName = savePath+ "/" + sdf1.format( new  Date()) +  "_" +name;  
          item.write( new  File(fileName)); 
      }
     
  }
   message =  "文件上传成功!" ;
  } catch  (Exception e) {
      message=  "文件上传失败!" ;
      e.printStackTrace();
}



文件下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//获得文件名和文件路径
String name = map.get( "name" )+ "" ;
String path = map.get( "path" )+ "" ;
 
String filename=  new  String(name.getBytes( "utf-8" ), "iso8859-1" );
 
File file =  new  File(path);
InputStream fis =  new  BufferedInputStream( new  FileInputStream(path));
byte [] buffer =  new  byte [fis.available()];
fis.read(buffer);
fis.close();
response.reset();
response.addHeader( "Content-Disposition" "attachment;filename="  new  String(name.replaceAll( " " "" ).getBytes( "utf-8" ), "iso8859-1" ));
response.addHeader( "Content-Length" ""  + file.length());
OutputStream os =  new  BufferedOutputStream(response.getOutputStream());
response.setContentType( "application/octet-stream" );
os.write(buffer); // 输出文件
os.flush();
os.close();