- 上传图片和文件form的属性应该是
enctype="multipart/form-data"
,字符将转成二进制流,因此request.getParameter(“user_type”)是得不到值。 - 默认情况,传递参数编码格式是
application/x-www-form-urlencoded
,不能用于文件上传。
本文主要介绍表单中上传文件并提交表单值,采用apache的commmon-upload jar包。也可以参考我的博客中另一种实现方式
【同一表单上传头像并提交文本值】
一、准备:
- commons-fileupload-1.3.jar
- commons-logging-1.1.1.jar
- commons-io-2.2.jar
- commons-lang3-3.2.jar
二、代码:
2.1 html
<%@ page contentType="textml;charset=utf-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="text" name="intro">
<input type="file" name="f1">
<input type="submit" value="上传">
</form>
</body>
<html>
2.2 servlet
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
} // 解析request请求
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) { // 如果是表单域 ,就是非文件上传元素
String name = item.getFieldName(); // 获取name属性的值
String value = item.getString(); // 获取value属性的值
if (item.getFieldName().equals("intro")) {
System.out.println(value);
}
} else {
String fieldName = item.getFieldName(); // 文件域中name属性的值
String fileName = item.getName(); // 文件的全路径,绝对路径名加文件名
String contentType = item.getContentType(); // 文件的类型
long size = item.getSize(); // 文件的大小,以字节为单位
File saveFile = new File("D:/test.jpg"); // 定义一个file指向一个具体的文件
try {
item.write(saveFile);// 把上传的内容写到一个文件中
} catch (Exception e) {
e.printStackTrace();
}
}
}