Java Web上传数据图片文件
发布日期:2021-06-29 15:01:27
浏览次数:2
分类:技术文章
本文共 6065 字,大约阅读时间需要 20 分钟。
Java Web上传数据
上传图片的准备工作
1、标单method必须为post
2、提供file组件 3、设置form标签的enctyoe属性的值是multipart/form-data 如果没有multipart/form-data浏览器是获取不到图片的,获取到的只是文件名称Insert title here
分析上传的时候HTTP协议的格式
POST /TestIpload/ServletDemo01 HTTP/1.1
请求头: 请求头: 请求头: 图片二进制数据,代表图片自身 如果设置了表单form标签的enctype的属性之后,请求体部分的内容的格式发生了更改username=tom&password=1234&userhead=11.bmp
创建一个Servlet获取页面提交到的数据
测试代码
ServletDemo01
public class ServletDemo01 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // String username = request.getParameter("username");// null // String password = request.getParameter("password");// null // String userhead = request.getParameter("userhead");// null // System.out.println(username + "=" + password + "=" + userhead); // request.getParameter(name);获取到的是 请求体部分为键值对或者说浏览器路径后键值对的数据 // 现在请求体的内容已经不是键值对了 // 通过request对象获取到一个输入流对象 InputStream is = request.getInputStream(); // 打印输入流当中的对象 int i = is.read();//将所有的数据放入到int 类型的i当中 while (i != -1) { char c = (char) i; System.out.print(c); i = is.read(); } }}
控制台输出内容
可以看到服务端接收到相关的数据包括username password 图片的编码 结论: 1、如果设置了mutipart/form-data,在服务端是无法通过request.getParameter(name);获取数据的2、可以通过request.getInputStream();获取请求体部分的数据
具备手动实现上传的可行性利用一个上传的commons-fileupload jar包来实现上传数据的功能
思路:
1、导入架包后2、执行很简单的3行语句,((1)读取请求体部分的数据【将分隔线当中的内容分装成为一个对象】)
3、就可以获取到一个集合,
4、集合里面放入的是对象,将每对分隔线当中的内容分装在了FileItem对象上
5、遍历集合
6、如果当前的FileItem的对象是普通项
将普通项上的name属性的值作为键,将获取到内容作为值放入到map集合当中 {username 《=》 tom , password 《=》1234}7、如果当前的FileItem对象是上传项
通过FileItem获取到输入流对象,通过输入流对象获取到图片的二进制数据, 在服务端创建一个空文件(后缀必须和上传到服务端文件名的后缀一致) 建立和空文件对应输出流 将输入流当中的数据刷到输出流当中 释放资源 向map当中存入一个键值对的数据 userhead <==> /images/11.bmp {username 《=》 tom , password 《=》1234,userhead《=》image/11.bmp}8、利用BeanUtils将MAP中的数据填充到一个对象上
9、service——dao将user上携带的数据存入到数据仓库,从定向到一个查询全部商品信息路径步骤实现:
1、导入jar包 百度去—》 创建ServletDemo01的Servlet对象同时导入入beanutlist相关的架包
beanutlist的作用是将map集合上键值和user相符的数据,放置到user对象上(1) BeanUtils相关包
commons-beanutils-1.8.3.jar commons-beanutils-1.8.3-javadoc.jar commons-beanutils-1.8.3-javadoc.jar commons-beanutils-bean-collections-1.8.3.jar commons-beanutils-core-1.8.3.jar (2) Logic4j相关包 commons-logging.jar
public class ServletDemo01 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // MAP目的:是携带数据{username <==> tom,password <==> 1234,userhead<==>/images/11.bmp} Mapmap = new HashMap (); try { // 以下这3行语句对请求体的request对应的内容进行拆分包装 // 通过request.getInputStream();获取到请求体的全部内容 // 进行解析,将每对分隔线当中的内容分装在了FileItem DiskFileItemFactory fac = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(fac); List list = upload.parseRequest(request);// 将页面当中的数据传入到 // 遍历集合 for (FileItem item : list) { if (item.isFormField()) { // 判断其是否是普通项 // 5、如果当前的FileItem对象是普通项 // 将普通项上的name属性的值作为键,将获取到内容作为值放入到map集合当中 // {username 《=》 tom , password 《=》1234} // System.out.println(item.getString("utf-8")+".....普通项"); // 将普通项以键值对的方式将其放入到mop集合当中包括其name和与其对应的值 map.put(item.getFieldName(), item.getString("utf-8")); } else { // 这里是上传数据的项 // 7、如果当前的FileItem对象是上传项 // 通过FileItem获取到输入流对象,通过输入流对象获取到图片的二进制数据, // 在服务端创建一个空文件(后缀必须和上传到服务端文件名的后缀一致) // 建立和空文件对应输出流 // 将输入流当中的数据刷到输出流当中 // 释放资源 // 向map当中存入一个键值对的数据 userhead <==> /images/11.bmp // {username 《=》 tom , password 《=》1234,userhead《=》image/11.bmp} // 8、利用BeanUtils将MAP中的数据填充到一个对象上 // 9、service——dao将user上携带的数据存入到数据仓库,从定向到一个查询全部商品信息路径 // System.out.println(item.getFieldName()); // System.out.println(item.getName()); // System.out.println(item.getString()); // item.getInputStream();//推荐通过此api来获取图片的数据 // 通过FileItem获取到输入流对象,通过输入流对象获取到图片的二进制数据, InputStream is = item.getInputStream(); // 这里获取到的是文件夹在计算机当中实际的路径 String realPath = getServletContext().getRealPath("/images/img");// 获取到项目下文件的真实路径 File file = new File(realPath, item.getName());// 将路径和对应的图片名称放入到 // 判断该文件名称的文件在当前路径当中是否存在 // 在服务端创建一个空文件(后缀必须和上传到服务端文件名的后缀一致) if (!file.exists()) { // 如果不存在 file.createNewFile();// 就创建该文件 } // 建立和空文件对应输出流 OutputStream os = new FileOutputStream(file); // 将输入流当中的数据刷到输出流中 IOUtils.copy(is, os); // 释放资源 IOUtils.closeQuietly(is); IOUtils.closeQuietly(os); // 将从客户端获取到的图片的名称以及其对应的路径放入到map集合当中,,,通过上面的数据已经将实际的数据图片放入到项目当中对应的文件当中 map.put("userhead", "/images/img" + item.getName()); } } // 8、利用BeanUtils将MAP中的数据填充到一个对象上 // 9、service——dao将user上携带的数据存入到数据仓库,从定向到一个查询全部商品信息路径 BeanUtils.populate(user, map); } catch (Exception e) { e.printStackTrace(); } }}
创建User类
package com.itzheng.cn;public class User { private String username; private String passowrd; private String userhead; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassowrd() { return passowrd; } public void setPassowrd(String passowrd) { this.passowrd = passowrd; } public String getUserhead() { return userhead; } public void setUserhead(String userhead) { this.userhead = userhead; } public User() { // TODO Auto-generated constructor stub } public User(String username, String passowrd, String userhead) { super(); this.username = username; this.passowrd = passowrd; this.userhead = userhead; } @Override public String toString() { return "User [username=" + username + ", passowrd=" + passowrd + ", userhead=" + userhead + "]"; }}
转载地址:https://code100.blog.csdn.net/article/details/105263261 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月24日 23时50分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于java的左面聊天室系统的设计与实现
2019-04-29
基于ssh的学生成绩管理系统的设计与实现
2019-04-29
基于ssh的学生宿舍管理系统
2019-04-29
基于ssm的在线招标系统的设计与实现
2019-04-29
基于vue框架的在线问卷的设计
2019-04-29
java的酒店房间管理系统
2019-04-29
基于Java的截图工具
2019-04-29
基于JAVA的停车场管理系统
2019-04-29
基于SSM的网上购物系统的设计与开发
2019-04-29
基于SSM框架的BS微博系统的设计与实现
2019-04-29
超市订单管理系统
2019-04-29
基于ssm的民宿网站
2019-04-29
基于JavaWeb的物流管理系统的设计与实现
2019-04-29
基于Java的飞机大战游戏的设计与实现论文
2019-04-29
基于java实现的超级马里奥游戏
2019-04-29
keepalived 实现高可用,负载均衡
2019-04-29
linux发送邮件通知
2019-04-29
linux不删除文件:替换rm命令
2019-04-29
Centos6 搭建lnmp环境
2019-04-29
Hbase优化:使用压缩snappy,lz4
2019-04-29