enctype="multipart/form-data"表单传值问题
问题:
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();
}
}
---------------------
enctype="multipart/form-data"表单传值问题的更多相关文章
- select标签 禁止选择但又能通过序列化form表单传值到后台
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁止选择但又能通过序列化form表单传值到后台,但是当我们使用disabled="disabled"时发现,无法序列化 ...
- PHP中的表单传值
前言:试想一下如果PHP没有了表单传值,那么就相当于一个没有表达能力的人,因此表单传值在php中是相当重要的,但是不难,接下来我们一起来探讨一下吧------> (一)什么是表单传值 概念:表 ...
- 解析:使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
之前开发时遇到的一个问题,使用easyui的form提交表单,在Chrome下时没问题的,但是在IE下出现类似附件下载时提示是否保存的现象. 这里记录一下如何解决的.其实这个现象不光是easyui的f ...
- Laravel表单传值
仔细阅读过Laravel官方文档的就不用看啦~ 整理下之前遇到的关于Laravel表单的一些小问题 表单传值无法传过去,因为laravel做了表单的防护 只需要将{{ csrf_field() }}放 ...
- 使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
之前开发时遇到的一个问题,使用easyui的form提交表单,在Chrome下时没问题的,但是在IE下出现类似附件下载时提示是否保存的现象. 这里记录一下如何解决的.其实这个现象不光是easyui的f ...
- 关于form与表单提交操作的一切
原文链接:http://caibaojian.com/form.html 你知道,一个表单里面只要有form元素,如果没有给action加一个默认值,为空白的时候,当你刷新页面时,会弹出一个警告框提示 ...
- 阻止form空表单提交----JavaScript
网上看到很不错的阻止form空表单提交 第一种方法 <div class="warp"> <h2>登录到pfan空间</h2> <p> ...
- form注册表单圆角 demo
form注册表单圆角 <BODY> <div class="form"> <ul class="list"> <li& ...
- Form提交表单页面不跳转
1.设计源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- WP Mail SMTP插件解决Contact Form 7表单提交失败问题
WP Mail SMTP插件解决Contact Form 7表单提交失败问题 WP Mail SMTP是一款非常优秀的解决WordPress主机因为不支持或者是禁用了mail()函数,导致无法实现在线 ...
随机推荐
- Linux 系统开启最大线程数 调优
系统最大线程数说明 系统可开启的最大线程数,可根据系统本身负载配置进行调优. 查看系统最大线程数 1.查看系统开启的最大线程数. ulimit -u [root@izbp1brwu1w35r1dmj8 ...
- 剑指offer(63)数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值.我们 ...
- luogu3426 [POI2005]SZA-Template 后缀树
链接 bzoj不能auto https://www.luogu.org/problemnew/show/P3426 思路 这个要求的串一定是S的前缀和S的后缀. 转化一下 建立出来fail树(fail ...
- The SOLID principles(未完,待续)
The SOLID principles The SOLID principles of Object Oriented Design include these five principles: S ...
- 二叉树分派硬币 Distribute Coins in Binary Tree
2019-03-27 15:53:38 问题描述: 问题求解: 很有意思的题目.充分体现了二叉树的自底向上的递归思路. 自底向上进行运算,对于最底层的二叉子树,我们需要计算每个节点向其parent传送 ...
- springboot启动配置原理之三(事件监听机制)
ApplicationContextInitializer public class HelloApplicationContextInitializer implements Application ...
- English trip V2 - A 1. Fastival Teacher:Julia Key:
In this lesson you will learn to talk about dates and times. 课上内容(Lesson) Tell your tutor about a fe ...
- linux存储管理之磁盘阵列
磁盘阵列 RAID ====================================================================================RAID:廉 ...
- 『TensorFlow』读书笔记_SoftMax分类器
开坑之前 今年3.4月份的时候就买了这本书,同时还买了另外一本更为浅显的书,当时读不懂这本,所以一度以为这本书很一般,前些日子看见知乎有人推荐它,也就拿出来翻翻看,发现写的的确蛮好,只是稍微深一点,当 ...
- [spring源码] 小白级别的源码解析IOC容器的依赖注入(三)
上一篇介绍了ioc容器的初始化过程,主要完成了ioc容器建立beanDefinition数据映射.并没有看到ioc容器对bean依赖关系进行注入. 接口getbean就是出发依赖注入发生的地方.下面从 ...