Java上传图片和其他字段

这篇博客介绍了在Java Web环境中如何使用JSP和Servlet处理图片上传,并结合Dao层进行数据操作,涵盖了文件上传和数据库交互的基础流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发工具与关键技术:java、myeclise 10
作者:清晨
撰写时间:6.28

Jsp中的代码

<form action="${ctx}/servlet/UserServlet?fun=test" method="post" enctype="multipart/form-data" >
       <div class="img-box text-center">
           <img width="120" height="180" id="imgtestimg" />
           <input type="file"  id="testimg" name="testimg" />
       </div>
          <input type="text" class="form-control"  name="testname" />
          <input type="submit" class="form-control" value="上传" />
   	</form>
   	<script type="text/javascript" src="${ctx}/js/jquery-2.0.3.min.js"></script>
   	<script type="text/javascript" src="${ctx}/js/jquery.form.js"></script>
   	<script type="text/javascript">
   		 //通过文件获取的接口来获取选择的图片并显示出来
        //FileReader接口提供了一个异步的API,通过这个API可以从浏览器中异步访问文件系统中的数据。因此,FileReader接口可以读取文件中的数据,并将读取的数据放入到内存中去
        //选择照片:用FileReader对象来读取本地数据,并且将数据结果赋值给image的src
        var imgReaderI = new FileReader();
        //图片文件 正则表达式过滤
        regexImgFilter = /^(?:image\/bmp|image\/png|image\/jpeg|image\/jpg)$/i;
        //回调函数onLoad异步
        imgReaderI.onload = function (evt) {
            $("#imgtestimg").attr("src", evt.target.result);
        }
        //在显示图片之前判断上传的图片是否是有效的格式(返回图片路径,调用回调函数)
        $("#testimg").change(function () {
            var imgFile = $("#testimg").prop("files")[0];
            if (!regexImgFilter.test(imgFile.type)) {
                //layer提示框,默认显示3秒后自动关闭
                layer.msg('选择的不是一个有效的图片文件', { icon: 0 });
            }else {
                //readAsDataURL()方法可以获取API异步读取的文件数据,另存为数据URL;将该URL绑定到img标签的src属性上,就可以实现图片的上传预览效果了。
                imgReaderI.readAsDataURL(imgFile);
            }
        });
   	</script>

Servlet

public String test(HttpServletRequest request,HttpServletResponse response) throws ServerException ,IOException{
		//MAP目的:携带数据{username<==>tom,password<==>1234,userhead<==>/images/11.bmp}
		Map<String,String> map=new HashMap<String,String>();
		TestPo po=new TestPo();//创建对象
		try {
			//以下三行代码功能: 通过request.getInputStream();获取到请求体的全部内容
			//进行解析,将每对分割线中的内容封装在了FileItem对象中
			DiskFileItemFactory fac=new DiskFileItemFactory();
			ServletFileUpload upload=new ServletFileUpload(fac);
			List<FileItem> list=upload.parseRequest(request);
			//4_遍历集合
			for (FileItem item : list) {
				//判断是否是普通象
				if (item.isFormField()) {
					//将普通项上name属性的值作为键,将获取到的内容作为值,放入MAP中
					//写utf-8是为了解析中文
					map.put(item.getFieldName(), item.getString("utf-8"));
				}else{
					//6_如果当前的FileItem对象是上传项
					//修改名称有的人可能相同的图片名称要不一样
					String oldFileName = item.getName();
					String newFileName = UploadUtils.getUUIDName(oldFileName);
					//通过FileItem获取到输入流对象,通过输入流可以获取到图片二进制数据
					//用流跟好一点,二进制是乱码,多次转换就不好读取了
					InputStream is=item.getInputStream();
					String realPath = getServletContext().getRealPath("/images/");
					File file=new File(realPath);
					if (!file.exists()) {
						file.mkdir();//创建目录

					}
					//在服务端创建一个空文件(后缀必须和上传到服务端的文件名后缀一致)
					File file2=new File(file,newFileName);
					if (!file2.exists()) {
						file2.createNewFile();
					}
					//建立和空文件对应的输出流
					//将输入流中的数据刷到输出流中
					OutputStream os=new  FileOutputStream(file2);
					//释放资源
					IOUtils.copy(is, os);
					IOUtils.closeQuietly(is);
					IOUtils.closeQuietly(os);
					//向map中存入一个键值对的数据 userhead<===> /image/11.bmp
					map.put("testimg", "/images/"+newFileName);
				}
			}
			//jar架包中的封装对象
			BeanUtils.populate(po, map);
			//设置时间
			po.setTestdate(new Date());
			//新增语句
			int dd=iUserService.insertTest(po);
			if (dd>0) {
				System.out.println("新增成功");
			}else{
				System.out.println("新增失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return "";
	}

Dao层面的代码

public int insertTest(TestPo po) {
		String sql ="insert into test(testname, testdate,testimg) values(?,?,?)";
		int result=0;
		try {
			con=DBUtil.getConnection();	ps=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
			ps.setString(1, po.getTestname());
			ps.setDate(2, new Date(po.getTestdate().getTime()));
			ps.setString(3, po.getTestimg());
			ps.executeUpdate();
			rs = ps.getGeneratedKeys();
			if (rs.next()) {
				result = Integer.parseInt(rs.getLong(1)+"");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
结果

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值