文件上传与下载的简单示例

<%@page language="java" pageEncoding="UTF-8"%>

<%@page import="java.util.ArrayList"%>

<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>

<%@page import="java.util.List"%>

<%@page import="java.util.Iterator"%>

<%@page import="org.apache.commons.fileupload.FileItem"%>

<%@page import="java.io.InputStream"%>

<%@page import="java.io.FileOutputStream"%>

<%@page import="java.util.Calendar"%>

<%@page import="java.util.Map"%>

<%@page import="java.util.Hashtable"%>

<%@page import="java.io.File"%>

<%@page import="java.io.OutputStream"%>

<%@page import="java.io.BufferedInputStream"%>

<%@page import="java.io.FileInputStream"%>

<%!    

    //按照某种规则得到互不重复的文件名

    public static String getFileName(){        

        Calendar cal = Calendar.getInstance();

        return cal.getTimeInMillis()+"";

    }

%>

<%

    String dir = "upload";

    //将文件名放在Map中,并将其放在Context作用域里

    Map<String,String> filemaps = (Map<String,String>)request.getSession().getServletContext().getAttribute("filemaps");

    if(filemaps==null){

        filemaps = new Hashtable<String,String>();

        request.getSession().getServletContext().setAttribute("filemaps",filemaps);

    }

        //上传文件

        if("up".equals(request.getParameter("action"))){

            List<String> errfiles = new ArrayList<String>();

            DiskFileUpload fileupload = new DiskFileUpload();

            fileupload.setHeaderEncoding("GBK");

            fileupload.setSizeMax(1500 * 1024); 

            fileupload.setSizeThreshold(1500 * 1024); 

            List fileItems = fileupload.parseRequest(request); 

            Iterator iter = fileItems.iterator();

            while (iter.hasNext()) {

                FileItem item = (FileItem) iter.next();

                if (!item.isFormField()) { 

                    String name =item.getName();

                    String savename = getFileName();

                    

                    

                    int indx = name.lastIndexOf(".");

                    String suffix = name.substring(indx);//从n开始到结束,即取出后缀名

                    filemaps.put(savename+suffix,new String(name.getBytes("gbk"),"utf-8"));

                    

                    InputStream istream = item.getInputStream();

                    String path = request.getSession().getServletContext().getRealPath(dir);

                    try{                        

                        File f = new File(path+"\\"+savename+suffix);

                        f.createNewFile();                    

                        FileOutputStream fout = new FileOutputStream(path+savename+suffix);

                        byte buffer[] = new byte[8192];

                        int count = 0;

                        while ((count = istream.read(buffer)) > 0) {

                            fout.write(buffer, 0, count);

                        }

                        fout.close();

                        item.delete(); 

                        System.out.println("***************");

                    }catch(Exception e){

                        e.printStackTrace();

                        errfiles.add(filemaps.get(savename));

                        filemaps.remove(savename);

                    }        

                    

                    request.setAttribute("errfiles",errfiles);

                }            

            }            

        }

        

        //删除文件

        if("delete".equals(request.getParameter("action"))){

            String filename = request.getParameter("filename");

            String path = request.getSession().getServletContext().getRealPath(dir);

            File f = new File(path+"\\"+filename);

            f.delete();

            System.out.println("_________:"+filemaps.size());

            filemaps.remove(filename);            

            System.out.println(filemaps);

            request.getSession().getServletContext().setAttribute("filemaps",filemaps);

        }

        

        //下载文件.

        if("load".equals(request.getParameter("action"))){

            OutputStream os = null;

            InputStream istream = null;

            BufferedInputStream bis = null;

            String filename = request.getParameter("filename");

            try {

                os = response.getOutputStream();

                response.reset();

                response.setHeader("Content-disposition", "attachment; filename="    + filename);

                response.setContentType("application/javascript");

                String path = request.getSession().getServletContext().getRealPath(dir);

                istream = new FileInputStream(path+filename);

                bis = new BufferedInputStream(istream);

                  byte data[] = new byte[1024];

                  int size = 0;

                  size = bis.read(data);

                  while(size!=-1){

                    os.write(data);

                    size = bis.read(data);

                  }

            }catch(Exception expt){

              expt.printStackTrace();

            }finally{

              try {

                    if (bis != null) {

                      bis.close();

                    }

                    if (istream != null) {

                        istream.close();

                    }

                    if (os != null) {

                      os.close();

                    }

                  } catch (Exception ex) {

                    ex.printStackTrace();

                  }

            }        

        }        

%>

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html;charset=GBK">

        <script language="javascript" type="text/javascript" >

            function deletefile(name){

                window.location.href="upload.jsp?action=delete&filename="+name;                

            }

            function downloadfile(name){

                window.location.href="upload.jsp?action=load&filename="+name;                

            }

        </script>

        <style type="text/css">

            body{

                font-size:13px;

            }

            table{

                font-size:13px;

            }

        </style>

    </head>

    <body>

        

        <div>

            <div>上传文件:</div>

            <form method="post" enctype="multipart/form-data" action="upload.jsp?action=up">

                <input type="file" name="file" />

                <input type="submit" value="确认" />

            </form>

            

        </div>

        <div>

            <div>文件详情:</div>

            <div>

                <table>

                    <tbody>

                        <%

                            boolean flag = true;

                            Map<String,String> files = (Map<String,String>)request.getSession().getServletContext().getAttribute("filemaps");

                            if(files!=null&&files.size()!=0){

                                flag=false;

                                for(Map.Entry<String,String> m:files.entrySet()){                                

                        %>                    

                        <tr><td><span name="<%=m.getKey()%>"><%=m.getValue() %></span></td><td><a href="javascript:downloadfile('<%=m.getKey()%>');" >下载</a>  <a href="javascript:deletefile('<%=m.getKey()%>');" >删除</a></td></tr>

                        <%                        

                                }

                            }

                            List<String> errfiles = (List<String>)request.getAttribute("errfiles");

                            if(errfiles!=null&&errfiles.size()!=0){

                                flag=false;

                                for(String m:errfiles){        

                        %>

                                            

                        <tr><td><span><%=m%></span></td><td><span style="font:red;" >上传失败</span></td></tr>

                        <%                        

                                }

                            }

                            

                            if(flag){

                        %>

                            <tr><td><span>还未上传任何文件!</span></td></tr>

                        <%    

                            }

                        %>

                    </tbody>

                </table>

            </div>

        </div>

    </body>

</html>
posted @ 2011-08-11 10:31  greatjone  阅读(241)  评论(0)    收藏  举报