文件的上传对表单的要求

<!-- 
上传文件:表单要求
1,enctype="multipart/form-data"
2.表单中需要有type="file"的input
3.表单的请求方式一定是POST。即method="post"
servlet要求
1.不能使用request.getParameter
2.使用request.getInputStream

 -->
<form action="/file_upload/RegistServlet" method="post" enctype="multipart/form-data">
    用户:<input name="username" type="text"><br>
    注册:<input name="password" type="password"><br>
    照片:<input name="pic" type="file" ><br>
    <input type="submit" value="提交">
</form>
        //获得复杂类型表单的输入流
        InputStream in = request.getInputStream();
        //获得输入流的内容
        String result = IOUtils.toString(in);

fileUpload的简单应用

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建接受文件的工厂类
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //创建文件解析对象
        ServletFileUpload sfu = new ServletFileUpload(factory);
        
        try {
            //解析request,获得表单中的每一文件(包含普通文本域)项
            List<FileItem> list = sfu.parseRequest(request);
            //遍历每一个文本项
            for(FileItem fi : list){
                //获得原始文件名
                String origFileName = fi.getName();
                //获得文本域项的内容
                String content = fi.getString();
                //获得文本域的名字
                String fieldName = fi.getFieldName();
                //文本域的内容的类型
                String ContentType = fi.getContentType();
                //获得文件的大小(以字节为单位)
                long size = fi.getSize();
                //是否是普通文本(普通文本就是非长传文件形式的文本)true代表普通字段,false是文件字段
                boolean isFieldForm = fi.isFormField();
                System.out.println("原始文件名:"+origFileName);
                System.out.println("文本项的内容:"+content);
                System.out.println("文本域的名字:"+fieldName);
                System.out.println("文本域的内容类型:"+ContentType);
                System.out.println("文件大小:"+size);
                System.out.println("是否是普通字段:"+isFieldForm);
                System.out.println("-----------------------------------");
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 简单的文件写入硬盘

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        /*//设置request请求的编码方式。解决上传文件名中含有中文,出现中文乱码的问题.方法1
        request.setCharacterEncoding("UTF-8");*/
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //创建接受文件的工厂类
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //创建文件解析对象
        ServletFileUpload sfu = new ServletFileUpload(factory);
        
        //解析request请求的编码方式。解决上传文件名中含有中文,出现中文乱码的问题.方法2
        sfu.setHeaderEncoding("UTF-8");
        try {
            //解析request,获得表单中的每一文件(包含普通文本域)项
            List<FileItem> list = sfu.parseRequest(request);
            //遍历每一个文本项
            for(FileItem fi : list){
                //获得原始文件名
                String origFileName = fi.getName();
                //获得文本域的名字
                String fieldName = fi.getFieldName();
                //是否是普通文本(普通文本就是非长传文件形式的文本)true代表普通字段,false是文件字段
                boolean isFieldForm = fi.isFormField();
                
                if(!isFieldForm){
                    if(fieldName != null && !"".equals(fieldName)){
                        //首先指定要上传的目录(就是把jsp页面上传的file文件,保存到哪个目录下),隐私文件可以放在web-inf下,提高安全性 
                        String upLoadPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
                        //生成UUID文件名,使文件名不会重复
                        String uuid = UUID.randomUUID().toString();
                        //获得原始文件的后缀名
                        String suffix = origFileName.substring(origFileName.lastIndexOf("."));
                        //创建文件对象
                        File file = new File(upLoadPath,uuid+suffix);
                        //把文件写入硬盘
                        fi.write(file);
                        //回写结果
                        response.getWriter().print("文件上传成功");
                    }
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

posted @ 2018-11-28 20:31  永远没对象  阅读(1130)  评论(0编辑  收藏  举报