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

    上传文件
    a.引入两个jar
    apache:commons-fileupload.jar组件
    commons-fileupload.jar组件依赖commons-io.jar
    b.代码
    前台jsp:
    <input type="file" name="spicture"/>
    表单提交方式必须为post
    在表单必须增加一个属性enctype="multipart/form-data"
    后台servlet:

    try {
            boolean isMultpart = ServletFileUpload.isMultipartContent(request);
            if(isMultpart) {//判断前台的form是否有multipart属性
                FileItemFactory factory=new DiskFileItemFactory();
                ServletFileUpload upload=new ServletFileUpload(factory);
                
                    //通过parseRequest解析form中的所有请求字段,并保存到items集合中(即前台传递的sno,sname,spicture此时就保存在了items中)
                    List<FileItem> items = upload.parseRequest(request);
                    //遍历items中的数据(item=sno sname spicture)
                    Iterator<FileItem> iter= items.iterator();
                    while(iter.hasNext()) {
                        FileItem item = iter.next();
                        String itemName=item.getFieldName();
                        int sno=-1;
                        String sname=null;
                        //判断前台字段 是普通form表单字段(sno sname),还是文件字段
                        if(item.isFormField()) {
                            if(itemName.equals("sno")) {//根据name属性判断item是sno sname还是spicture
                                sno=Integer.parseInt(item.getString("utf-8"));
                                //System.out.println("非其他字段sno");
                            }else if(itemName.equals("sname")) {
                                sname=item.getString("utf-8");
                                //System.out.println("非其他字段sname");
                            }else {
                                System.out.println("其他字段");
                            }
                        }else {//spicture
                            //    文件上传
                            //文件名 getFieldName是获取普通表单字段的Name值
                            //getName()是获取文件名
                            String fileName = item.getName();
                            //获取文件内容并上传
                            //定义文件路径:指定上传的位置(服务器路径)
                            //获取服务器路径
                            String path=request.getSession().getServletContext().getRealPath("upload");
                            
                            File file=new File(path,fileName);
                            item.write(file);//上传
                            System.out.println(fileName+"上传成功!");
                            return ;
                        }
                        
                    }
            }
            
            }catch (FileUploadException e) {
                    e.printStackTrace();
                }//解析请求
            catch (Exception e) {
                e.printStackTrace();
            }


    注意的问题:
    上传的目录 uplpad:
    1.如果修改代码,则tomcat重启会被删除
    原因:当修改代码的时候,tomcat会重新编译一份class并且重新部署(宠信创建各种目录)

    2.如果不修改代码,则不会被删除
    原因:没有修改代码,class仍然是之前的class
    因此为了防止上传目录丢失:a.虚拟路径b.直接更改上传目录到非tomcat目录

    限制上传:
    类型:

    String ext=fileName.substring(fileName.indexOf(".")+1);
    if(!(ext.equalsIgnoreCase("png")||ext.equalsIgnoreCase("gif")||ext.equalsIgnoreCase("jpg"))) {
    System.out.println("图片类型有误!格式只能是png gif png");
    return;
    }


    大小:

    //设置上传文件时用到的临时文件的大小 DiskFileItemFactory
    factory.setSizeThreshold(10240);//设置临时文件的缓冲文件大小为10kb
    factory.setRepository(new File("D:\test\uploadtemp"));//设置临时文件的目录
    
    //控制上传单个文件的大小 20kb ServletFileUpload
    upload.setSizeMax(20480);//字节


    注意 对文件的限制条件 写在parseRequest之前

  • 相关阅读:
    北京清北 综合强化班 Day1
    Noip2015 提高组 Day1
    Noip2016 提高组 Day2 T1 组合数问题
    2017.9.23 NOIP2017 金秋杯系列模拟赛 day1 T1
    [51NOD1103] N的倍数(鸽笼原理)
    [51NOD1420] 数袋鼠好有趣(贪心)
    [CF808A] Lucky Year(规律)
    [CF808B] Average Sleep Time([强行]树状数组,数学)
    [CF808C] Tea Party(贪心)
    [CF808D] Array Division(暴力,枚举)
  • 原文地址:https://www.cnblogs.com/mayouyou/p/13110456.html
Copyright © 2011-2022 走看看