zoukankan      html  css  js  c++  java
  • 文件上传

    文件上传

    首先写一个文件上传的页面

    jsp页面:

    <body>
        <form action="${ pageContext.request.contextPath }/UploadServlet" method="post" enctype="multipart/form-data">
        <table border="1" width="600">
            <tr>
                <td>文件描述</td>
                <td><input type="text" name="filedesc"></td>
            </tr>
            <tr>
                <td>文件上传</td>
                <td><input type="file" name="upload"></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="上传"></td>
            </tr>
        </table>
    </form>
    </body>


    在写servlet前解决文件重名问题
    使用UUID作为随机的文件名

    public class UUIDUtils {
    
        public static String getUUID(){
            return UUID.randomUUID().toString().replace("-", "");
        }
        
        public static String getUUIDFileName(String fileName){
            return UUID.randomUUID().toString().replace("-", "")+"_"+fileName;
        }
    }

    解决一个目录下存放的文件过多的问题

    public class UploadUtils {
    
        public static String getPath(String uuidFileName){
            // 使用唯一文件名.hashCode();
            int code1 = uuidFileName.hashCode();
            int d1 = code1 & 0xf; // 获得到1级目录.
            int code2 = code1 >>> 4;
            int d2 = code2 & 0xf; // 获得到2级目录.
            return "/"+d1+"/"+d2;
        }
    }

    此处的servlet是用的servlet3.0

    /**
     * 文件上传的Servlet
     */
    @WebServlet("/UploadServlet")
    @MultipartConfig
    public class UploadServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 接收普通数据:
            request.setCharacterEncoding("UTF-8");
            String filedesc = request.getParameter("filedesc");
            System.out.println("文件描述"+filedesc);
            // 接收文件:
            Part part = request.getPart("upload");
            
            long size = part.getSize();// 获得文件大小:
            System.out.println("文件大小:"+size);
            String name = part.getName();
            System.out.println("文件表单中的name属性的名称"+name);
            // 获得文件名:
            String header = part.getHeader("Content-Disposition");
            int idx = header.lastIndexOf("filename="");
            String fileName = header.substring(idx+10, header.length()-1);
            System.out.println("文件名:"+fileName);
            // 获得文件内容:
            InputStream is = part.getInputStream();
            // 获得upload的路径:
            String path = this.getServletContext().getRealPath("/upload");
            // 获得文件的唯一文件名:
            String uuidFileName = UUIDUtils.getUUIDFileName(fileName);
            String realPath = path+UploadUtils.getPath(uuidFileName);
            File file = new File(realPath);
            if(!file.exists()){
                file.mkdirs();
            }
            OutputStream os = new FileOutputStream(realPath+"/"+uuidFileName);
            byte[] b = new byte[1024];
            int len = 0;
            while((len = is.read(b))!=-1){
                os.write(b, 0, len);
            }
            is.close();
            os.close();
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
  • 相关阅读:
    将一个类的Lambda转换成另一个类的研究
    欧拉计划 第10题
    C#4.0泛型中的out使用
    WP7应用开发笔记(4) 圆形滑动控件实现
    欧拉计划 第6题
    欧拉计划 第一题
    助手系列之python的FTP服务器
    Visual C++ 2008进行MySQL编程
    通过FTP命令上传下载
    助手系列之连接mysql数据库
  • 原文地址:https://www.cnblogs.com/learnjfm/p/6958200.html
Copyright © 2011-2022 走看看