enctype="multipart/form-data"表单传值问题

来源:互联网 发布:景观设计需要哪些软件 编辑:程序博客网 时间:2024/05/22 00:26

问题:

form表单的enctype设置为multipart/form-data后,表单中除了文件后台能拿到,其他值后台都拿不到。

知识点:

一、application/x-www-form-urlencoded:

1、表单中的enctype值如果不设置,则默认是application/x-www-form-urlencoded,它会将表单中的数据变为键值对

的形式

2、如果action为get,则将表单数据编码为(name1=value1&name2=value2…),然后把这个字符串加到url后面,中间

用?分隔

3、如果action为post,浏览器把form数据封装到http body中,然后发送到服务器。

二、text/plain:

表单以纯文本形式进行编码

三、multipart/form-data:

1、当我们上传的含有非文本内容,即含有文件(txt、MP3等)的时候,需要将form的enctype设置为multipart/form-

data。

2、将表单中的数据变成二进制数据进行上传,所以这时候这时如果用request是无法直接获取到相应表单的值的

解决代码

public void execute1(HttpServletRequest request) throws IOException {        try {            //获取文件保存路径,判断是否存在该目录如果不存在创建            String Path = "/test.txt";            File file = new File(Path);            //判断文件是否存在,不存在就创建            if (!file.exists() && !file.isDirectory()) {                file.mkdirs();            }            DiskFileItemFactory factroy = new DiskFileItemFactory();            //创建文件上传解析器            ServletFileUpload upload = new ServletFileUpload(factroy);            //判断前端form表单是否为enctype="multipart/form-data"属性            boolean isF = ServletFileUpload.isMultipartContent(request);            //如果前端传过来的是表单是enctype="multipart/form-data"属性            if (isF) {                //使用解析器解析上传的表单数据,每个FileItem对应一个表单项                List<FileItem> fileItemList = upload.parseRequest(request);                for (FileItem fileItem : fileItemList) {                    if (!fileItem.isFormField()) {                        //不是普通的表单项,即是上传的是文件                        //获取文件名称                        String fileName = fileItem.getName();                        if (fileName.isEmpty()) {                            //如果文件名为空                            return;                        }                        //获取上传文件输入流                        InputStream in = fileItem.getInputStream();                        //创建文件输出流                        Path += "\\" + fileName;                        String str = "";                        String leng = "";                        BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8"));                        while ((leng = br.readLine()) != null) {                            str += leng;                        }                        System.out.println(str);                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(Path))));                        bw.write(str);                        bw.flush();                        bw.close();                        br.close();                        //FileItem对象被垃圾收集器收集时会自动清除临时文件,但及时调用delete方法可以更早的清除临时文件,释放系统存储资源。                        // 另外,当系统出现异常时,仍有可能造成有的临时文件被永久保存在了硬盘中。                        fileItem.delete();                    } else {                       /**                         * 获取表单中的非文件值                         */                        //表单中的空间name值                        System.out.println(fileItem.getFieldName());                        //该name值空间中的value值                        System.out.println(fileItem.getString("UTF-8"));                    }                }            } else {                //判断前端form表单不是enctype="multipart/form-data"属性,这里就不做处理了            }        } catch (Exception e) {            e.printStackTrace();        }    }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 社保户籍错了怎么办 身份证号码变更后驾驶证怎么办 公司倒闭欠工资怎么办 海南买房要社保怎么办? 工商核名不过怎么办 税局要求查账怎么办 完税凭证丢了怎么办 开票开错了怎么办 上海居住证搬家了怎么办 上海无户口 医保怎么办 淘宝账号注销不了怎么办 淘宝账号被覆盖怎么办 淘宝号注册不了怎么办 appleid密码忘了怎么办 蘑菇街用白富美后忘记账号怎么办 不知道宽带账号怎么办 上网用户名忘了怎么办 别人借淘宝号怎么办 不知道ipad密码怎么办 捡的ipad密码怎么办 12306注册名已存在怎么办 忘记网银用户名怎么办 登录用户名忘了怎么办 网银登录错误怎么办 路由器账号忘了怎么办 忘记宽带账号密码怎么办 12123被注册过怎么办 w10不能创建账户怎么办 忘记xp登录密码怎么办 华硕密码忘记了怎么办 电脑账户已停用怎么办 鼠标灯亮不动怎么办 电脑用户名被停用怎么办 电脑截图不清晰怎么办 win10电脑磁盘空间不足怎么办 我的用户名忘记怎么办 12306用户名密码忘记怎么办 电脑开机要密码怎么办 三星账户忘记了怎么办 电脑账户忘记了怎么办 电脑启动要密码怎么办