我们在写form提交表单的时候,后台大多数用request.getParameter的方式来接收前台输入的数据。但如果我们表单中提交的数据包含file文件传输的话,我们需要将Content-Type改为multipart/form-data。这时后台就不能再通过request.getParameter来获取表单的内容了。就需要通过request的输入流request.getInputStream来获取表单内容了。这里记录一种获取表单内容的方式,这种方式既可以获得表单的文本数据也可以获取图片的字节流

try {
String serverRealPath = request.getSession().getServletContext().getRealPath("/");
String path=serverRealPath+"saveImg";//文件保存路径
DiskFileItemFactory disk=new DiskFileItemFactory();
ServletFileUpload sfu=new ServletFileUpload(disk);
try {
List<FileItem> list=sfu.parseRequest(request);
for(FileItem file:list){
String fileName=file.getName();
if(fileName==null || "".equals(fileName)){
DataInputStream dataStream = new DataInputStream(
file.getInputStream());
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int n = 0;
while((n=dataStream.read(bytes))!= -1){
output.write(bytes, 0, n);
}
byte[] newbytes = output.toByteArray();
name = new String(newbytes,"UTF-8"); }else{
LOGGER.info("进入文件上传方法");
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
String extName=fileName.substring(fileName.lastIndexOf("."));//获取扩展.xxx
String newName=tarr_id+extName;//新名称
InputStream is = file.getInputStream();// 获取fileItem中的上传文件的输入流
FileOutputStream fos = new FileOutputStream(path+ File.separator + newName);// 创建一个文件输出流
byte buffer[] = new byte[1024];// 创建一个缓冲区
int length = 0;// 判断输入流中的数据是否已经读完的标识
while ((length = is.read(buffer)) > 0) {// 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
fos.write(buffer, 0, length);// 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" +filename)当中
}
//按照id生存新的文件名称
filePath=newName;
LOGGER.info("file1_path的值为:"+newName);
is.close();// 关闭输入流
fos.close();// 关闭输出流
file.delete();// 删除处理文件上传时生成的临时文件
} }
} catch (Exception e) {
LOGGER.error("文件读取失败!");
e.printStackTrace();
}
} catch (Exception e) {
LOGGER.error("文件上传失败!");
e.printStackTrace();
}

这里可以将request内容转为一个FileItem的list,然后可以遍历这个list来获取表单的内容,如果其中包含文件的话,file.getName是可以获取文件名的,如果getName的值为空的话,就说明这个不是文件。然后可以通过file.getInputStream获取其输入流,然后将其输出成ByteArrayOutputStream 字节输出流,就可以获取内容。

表单Content-Type为multipart/form-data时,后台数据的接收的更多相关文章

  1. from 表单用 GET 方法进行 URL 传值时后台无法获取问题

    问题描述 <a href="${pageContext.request.contextPath}/client?method=add">点我</a> < ...

  2. myeclipse10 .jsp将表单提交给.java(form网页与后台通信初识)

    做毕设需要用到form通信. 以下几张截图来自极课学院 servlet jsp文件 web配置 出现错误: 路径问题 仍然不对,需要再改 <form action="servlet/S ...

  3. form 表单<input type="button" value="登录" onclick="loginSubmit ()"/> 点击提示 Uncaught TypeError: loginSubmit is not a function

    在网上搜了一堆东东,仔细看了一下,再加上实验,发现原因出在<form>中. <form method="post"> <button type=&qu ...

  4. 表单:!!!常用JS: form 表单代码

    手机(文本框): <input type="text" name="" maxlength="11" placeholder=&quo ...

  5. 当一个页面中有多个form表单并且有重名的元素时,js获取指定form表单中的指定元素

    有时候我们会在一个页面中写了多个form表单,碰巧多个form表单中又有相同名称的元素,而我们又不想改名字,这个时候就能用到 $("#form1 #div1").val() 好玩吧 ...

  6. 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name&value>格式和JSON格式。

    http://zhengxinlong.iteye.com/blog/848712 将任意一个jQuery对象进行表单序列化,免除了提交请求时大量拼写表单数据的烦恼,支持键值对<name& ...

  7. input表单的type属性详解,不同type不同属性之间区别

    目标:详解表单input标签type属性常用的属性值 一.input标签和它的type属性 PS:input 元素可以用来生成一个供用户输入数据的简单文本框. 在默认的情况下, 什么样的数据均可以输入 ...

  8. 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树

    EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ...

  9. 关于在用curl函数post网页数据时,遇上表单提交 type为submit 类型而且没有name和id时可能遇到的问题及其解决方法

    curl函数库实现爬网页内容的链接在 http://www.cnblogs.com/linguanh/p/4292316.html 下面这个是没有name和id 标识的 <input type= ...

  10. 进一步丰富和简化表单管理的组件:form.js

    上文<简洁易用的表单数据设置和收集管理组件>介绍了我自己的表单管理的核心内容,本文在上文的基础上继续介绍自己关于表单初始值获取和设置以及表单数据提交等内容方面的做法,上文的组件粒度很小,都 ...

随机推荐

  1. springboot学习入门简易版二---springboot2.0项目创建

    2 springboot项目创建(5) 环境要求:jdk1.8+ 项目结构: 2.1创建maven工程 Group id :com.springbootdemo Artifact id: spring ...

  2. Computer Vision_33_SIFT:A novel coarse-to-fine scheme for automatic image registration based on SIFT and mutual information——2014

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  3. Python_continue_break语句

    1.continue,break语句: userArray=['张三','李四','王五','老六'] for name in userArray: if(name=='王五'): continue ...

  4. Sublime Text 解决 Unable to download XXX 问题

    Sublime Text 安装插件报错: Package Control Unable to download XXX. Please view the console for more detail ...

  5. 基本排序-冒泡/选择/插入(python)

    # -*- coding: utf-8 -*- import random def bubble_sort(seq): n = len(seq) for i in range(n-1): print( ...

  6. Oracle使用游标查询所有数据表备注

    功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...

  7. P2921 [USACO08DEC]在农场万圣节[SCC缩点]

    题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...

  8. 19 使用Vue实例的render方法渲染组件

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 2019年java技术大盘点

    福州SEO:2019年互联网企业在Java开发中有哪些主流.热门的IT技术呢,下面让我们来看一下. 微服务技术 微服务架构主要有:Spring Cloud. Dubbo. Dubbox等,以 Dubb ...

  10. 学到了林海峰,武沛齐讲的Day22-完 os sys json pickle shelve XML re

    __ file__    =====   文件路径 os.path.dirname( 路径 )=======到上一层目录 os sys