分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

Servlet3.0 多图片,文件上传

发布时间:2023-09-06 02:15责任编辑:蔡小小关键词:文件上传

1.分析

上传文件的过程:客服端选择一个文件后,写入到服务器端,服务器端使用一个目录来存储该文件--底层IO流操作

2.jsp文件上的表单设计

表单传输格式用multipart/form-data,要上传的文件input标签name属性最好用同样的前缀或者后缀好获取

<form method="post" class="form-x" action="${pageContext.request.contextPath}/UserServlet.action?method=updateImg" ??enctype="multipart/form-data" > ???????????????<div class="form-group"> ???????????????<div class="label"> ?????????????????<label>图片:</label> ???????????????</div> ??????????????<div class="field"> ?????????????????<input type="text" ?class="input tips" style="width:25%; float:left;" ?data-toggle="hover" data-place="right" data-image="${pageContext.request.contextPath}/images/headimg.jpg" /> ?????????????????<input type="file" class="button bg-blue margin-left" name="myfile1" ?style="float:left;"> ?????????????????<div class="tipss">图片尺寸:500*500</div> ???????????????</div> ?????????????</div> ???????????<div class="field"> ??????????<button class="button bg-main icon-check-square-o" type="submit"> 提交</button> ??????</div> </form>

3后台Servlet处理

1.Servlet 上增加注解@MultipartConfig(一定要写 )不写嘿嘿你可以试试让你疯狂却找不到错误代码

@MultipartConfigpublic class UserServlet extends HttpServlet {

content-disposition头字段不懂点链接:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition

高版本浏览器现在F12看不到这个信息了


public void updateImg(HttpServletRequest request, HttpServletResponse response) ???????????throws ServletException, IOException { ???????//传虚拟路径返回真实路径 ???????String path = this.getServletContext().getRealPath("/images"); ???????//要解析文件域 要用getPart方法 getPart方法得到的是一个文件域 ????????//使用getParts()获取表单使用multipart/form-data传输格式发过来的请求体,其中包含了文件域参数 ???????//返回的是Part对象的集合,每个Part就是表单中的一个参数,可以是普通表单元素(如文本框),也可以是特殊的File(文件域) ???????Collection<Part> parts = request.getParts(); ???????for (Part part : parts) { ???????????//获取请求体中的参数名字 ???????????String name = part.getName();      
       //解析表单参数,如果名称是myfile1,说明part是一个File 当然是别的就可以用字符串比较即可比如以file开头的: part.getName().startsWith("file")   
        if("myfile1".equals(name)){
//说明当前part是一个文件域,获取content-disposition头字段的值 ???????????????//格式:form-data;name="myfile1";filename="adv_1.jpg" ???????????????String header = part.getHeader("Content-Disposition"); ???????????????String oldName = this.getOldName(header); ???????????????//获取新的文件名 ???????????????String newName = this.newName(oldName); ???????????????//把文件保存在服务器的images目录下 ???????????????part.write(path+"/"+newName); ???????????????????????????????//将图像更新到数据库中 ????????????????????????????} ???????} ???????????} ???????//从content-disposition中获取文件名 ???public String getOldName(String header){ ???????//分割整个字符串,得到数组[form-data,name="myfile1",filename="adv_1.jpg"] ???????String[] array = header.split(";"); ???????String filenameStr = array[2]; ???????????????filenameStr = filenameStr.substring(filenameStr.indexOf("\"")+1, filenameStr.length()-1); ???????return filenameStr; ???} ???//根据原始文件名生成新的文件名 ???public String newName(String oldName){ ???????SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmssSSS"); ???????String format = sdf.format(new Date()); ???????format += oldName; ???????return format; ???}

 注意:这是上传到tomcat服务器上的直接在myEclipse工作空间中是找不到的,然后把路径存到数据库中就可以通过浏览器访问该图片了

Servlet3.0 多图片,文件上传

原文地址:https://www.cnblogs.com/xwloveyu/p/9688432.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved