1.multipart/form-data
1、既可以提交普通键值对,也可以提交(多个)文件键值对。
2、HTTP规范中的Content-Type不包含此类型,只能用在POST提交方式下,属于http客户端(浏览器、java httpclient)的扩展
3、通常在浏览器表单中,或者http客户端(java httpclient)中使用。
页面中,form的enctype是multipart/form-data,提交时,content-type也是multipart/form-data。
multipart/form-data格式
2.application/x-www-form-urlencoded
不属于http content-type规范,通常用于浏览器表单提交,数据组织格式:name1=value1&name2=value2,post时会放入http body,get时,显示在在地址栏。
@WebServlet(urlPatterns = "/upLoadMusic")
public class UpLoadMusicServlet extends HttpServlet {
private Music music = new Music();
private MusicService musicService = new MusicServiceImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
try {
//1、创建磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2、创建文件上传的核心类
ServletFileUpload upload = new ServletFileUpload(factory);
//判断该表单 是否是文件上传表单
boolean multipartContent = upload.isMultipartContent(req);
System.out.println(multipartContent);
if (multipartContent) {
//3、解析request---获得文件项集合(表单转换为集合)
List<FileItem> list = upload.parseRequest(req);
if (list != null) {
// 4、遍历文件项集合
for (FileItem item : list) {
//判断普通表单项/文件上传项
if (item.isFormField()) {//普通表单项
//获取name属性的值
String fieldName = item.getFieldName();
//获取value属性的值 按照utf-8格式获取
String fieldValue = item.getString("utf-8");
if (fieldName.equals("title")){
music.setTitle(fieldValue);
//System.out.println("歌名:"+music.getTitle());
} else if (fieldName.equals("singer")){
music.setSinger(fieldValue);
//System.out.println("歌手:"+music.getSinger());
}
} else {//文件上传项
music.setTime(DateUtils.getDateFormart());//上传时间
User user = (User)req.getSession().getAttribute("user");
String substring = user.getId().substring(0, 1);
music.setUserid(Integer.parseInt(substring));
System.out.println("上传用户id:"+substring);
//目的:将该文件上传指定位置
//获取文件名
String fileName = item.getName();
System.out.println("fileName"+fileName);
//获取输入流
InputStream in = item.getInputStream();
//文件上传至TomCat服务器
//获取项目运行的根路径
String realPath = this.getServletContext().getRealPath("/");
//获取路径到webapps
String webapps = realPath.substring(0, realPath.indexOf("music_player"));
music.setUrl(webapps + "upLoad\\");
//获取输出流 指定要复制的位置
FileOutputStream out = new FileOutputStream(webapps + "/upLoad/"+fileName);
//执行复制 并释放资源
IOUtils.copy(in, out);
in.close();
out.close();
}
}
}
int i = musicService.upLoadMusic(music);
if (i>0){
req.setAttribute("msg","上传成功~");
req.getRequestDispatcher("loginSuccessful.jsp").forward(req,resp);
} else {
req.setAttribute("msg","上传失败~");
req.getRequestDispatcher("loginSuccessful.jsp").forward(req,resp);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}