Jsp/servlet上传文件、图片(老版方法)

来源:互联网 发布:蒙牛网络漏洞 编辑:程序博客网 时间:2024/04/27 20:45

额呵呵呵....

这个是servlet 3.0之前的上传方法..............................................

一、Jsp部分

<div id="formwrapper">
    <h3>添加餐品</h3>
    <form action="FoodServlet?method=add"  method="post" enctype="multipart/form-data">
    <fieldset>
        <legend>餐品信息</legend>
        <div>
            <label for="name">餐品名称</label>
            <input type="text" name="foodName" id="foodName" value="" size="150" maxlength="200" />
            <br />    
        </div>
        <div>
            <label for="descp">餐品金额</label>
            <input type="text" name="foodPrice" id="foodPrice" value="" size="150" maxlength="200" />
            <br />    
        </div>
        <div>
            <label for="descp">餐品描述</label>
            <input type="text" name="foodDesc" id="foodDesc" value="" size="150" maxlength="200" />
            <br />    
        </div>
        <div>
            <label for="descp">上传图片</label>
            <input type="file" name="photo" id="photo" size="150" maxlength="200" />
            <br />    
        </div>
        <div class="enter">
            <input name="submit" type="submit" class="buttom" value="提交" />
            <input name="reset" type="reset" class="buttom" value="重置" />

-----------------------------------------------------------------------------------------------------------------美丽分割线

注意: form元素的 enctype属性改为 "multipart/form-data" ,用二进制流传送数据到后台,包括文件的文件域。



二、servlet接收并解析参数

public void add(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String foodName = null;
        int foodPrice = 0;
        String foodDesc = null;
        String foodImgSrc = null;
        
        //设置保存上传文件保存路径
        String savePath = getServletContext().getRealPath("/backend/images/foodImages");
        //判断路径是否存在,若不存在则创建路径
        File saveDir = new File(savePath);
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        //两个上传处理的核心对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload sfu = new ServletFileUpload(factory);
        try {
            List items = sfu.parseRequest(request);
            Iterator it = items.iterator();
            while(it.hasNext()){
                //FileItem 是个API已有接口
                FileItem item = (FileItem) it.next();
                //判断是否为普通的控件,若是则执行 if 里的内容
                if(item.isFormField()){
                    if(item.getFieldName().equals("foodName")){  //判断控件名是否相等,对应元素的name
                        String value = item.getString();
                        //因为是二进制传入的参数,所以在这里还要编码重组
                        value = new String(value.getBytes("ISO-8859-1"),"utf-8");
                        foodName = value;
                    }
                    else if(item.getFieldName().equals("foodPrice")){
                        String value = item.getString();
                        System.out.println("转换前金额为:----"+value);
                        int a = Integer.valueOf(value);
                        System.out.println("转换后金额为:----"+a);
                        foodPrice = a;
                    }
                    else if(item.getFieldName().equals("foodDesc")){
                        String value = item.getString();
                        value = new String(value.getBytes("ISO-8859-1"),"utf-8");
                        foodDesc = value;
                    }
                }
                else{
                    //获取文件大小
                    Long size = item.getSize();
                    //获取文件名(包含了文件的类型后缀)
                    foodImgSrc = item.getName();
                    System.out.println("文件名: "+foodImgSrc);
                    if(foodImgSrc.endsWith(".exe")){
                        request.setAttribute("msg", "类型不符合要求");
                    }
                    else{
                        //在指定路径写出文件
                        File file = new File(savePath,foodImgSrc);
                        item.write(file);
                    }
                }
            }
        } catch (FileSizeLimitExceededException e){
            request.setAttribute("msg", "文件太大");
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e){
            e.printStackTrace();
        }

0 0
原创粉丝点击