对于学习JSP/SERVLET的人来说,学会使用jar包实现文件上传的只是一种入门,就好像别人写了一个类,你知道调用类的main方法一样。但是,我们不仅要知道怎么调用main方法,更要知道main方法中写的是什么。最近对文件上传下载感兴趣,就找了找相关资料,结合自己所学,做了一个文件上传的例子。便于大家的学习。
例子的功能:
- 实现多文件上传下载
- 实现获取提交的form表单的其他项
- 实现获取上传文件的列表
- 注意:本例子在struts下失效,原因是struts对request进行过封装。
文件只有两个。
1.test.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>首页</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <form action="FileUpload" method="post" enctype="multipart/form-data"> <table> <tr> <td width="120" align="center">值1:</td> <td width="180"><input type="text" name="name1" ></td> </tr> <tr> <td width="120" align="center">值2:</td> <td width="180"><input type="text" name="name2" ></td> </tr> <tr> <td width="120" align="center">路径1:</td> <td width="180"><input type="file" name="file"></td> </tr> <tr> <td width="120" align="center">路径2:</td> <td width="180"><input type="file" name="file2"></td> </tr> <tr> <td><input type="submit" value="确定" /></td> </tr> </table> </form> </body> </html>
2.FileUpload.java
import java.io.BufferedOutputStream; /** * 上传附件 */ @WebServlet("/FileUpload") public class FileUpload extends HttpServlet { private String fpath="c:/"; private Map<String, String> map=new HashMap<String, String>(); private List<File> files=new ArrayList<File>(); private long getFileUpload(HttpServletRequest request) throws IOException{ long start=System.currentTimeMillis(); ServletInputStream in = request.getInputStream(); getFileUpload(in,getSign(request),fpath); long end=System.currentTimeMillis(); return end-start; } public String getSign(HttpServletRequest request){ String contentType = request.getContentType(); int index = contentType.indexOf( "boundary=" ); return "--" + contentType.substring( index + 9 ); } private void getFileUpload(ServletInputStream in,String sign, String fpath) throws IOException { int l=0; byte[] b=new byte[1024]; //用来指示要上传的文件 File file=null;; BufferedOutputStream out=null; //用来存放form表单中的value的值。这儿考虑到textarea等,所以用到了sb StringBuilder sb=new StringBuilder(); //用来存放form中的name值 String name=""; while((l=in.readLine(b, 0, b.length))>0){ if (file==null) { String temp=new String(b,0,l); String lowerTemp=temp.toLowerCase(); if (lowerTemp.startsWith( "content-disposition: form-data; " )) { if (lowerTemp.contains("filename=\"") && !lowerTemp.contains("filename=\"\"")) { int nIndex=lowerTemp.indexOf("filename=\""); int nLastIndex=temp.indexOf("\"",nIndex+10); String filePath=temp.substring(nIndex+10, nLastIndex); String filename=filePath.substring(filePath.lastIndexOf("\\")+1); file=new File(fpath+filename); out=new BufferedOutputStream(new FileOutputStream(file)); in.readLine(b, 0, b.length); }else if (lowerTemp.contains("name=\"")) { name=temp.substring(lowerTemp.indexOf("name=\"")+6,temp.lastIndexOf("\"")); } in.readLine(b, 0, b.length); }else if (!"".equals(name)){ if (temp.startsWith(sign)) { map.put(name, sb.toString()); name=""; sb=new StringBuilder(); }else sb.append(new String(b,0,l-2)); } continue; } if (l==sign.length()+2 || l==sign.length()+4) { String temp=new String(b,0,l); if (temp.startsWith(sign)) { out.flush(); out.close(); files.add(new File(file.getAbsolutePath())); file=null; out=null; continue; } } out.write(b,0,l); out.flush(); } if (file!=null) { files.add(new File(file.getAbsolutePath())); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("GBK"); long time=getFileUpload(request); System.out.println("上传文件花费时间为:"+time+"毫秒,文件上传位置为:"+fpath); System.out.println("form表单的值为:"); for (String key : map.keySet()) { System.out.println(key+":"+map.get(key)); } System.out.println(); System.out.println("上传的文件有:"); for(File file:files){ System.out.println(file.getName()); } response.getWriter().write("success!!!"); } }
3.附送一个ServletInputStream读取的内容:
Content-Disposition: form-data; name="name1"
1
------WebKitFormBoundaryXjfYhqOTqQagpQHN
Content-Disposition: form-data; name="name2"
2
------WebKitFormBoundaryXjfYhqOTqQagpQHN
Content-Disposition: form-data; name="file"; filename="a.txt"
Content-Type: text/plain
------WebKitFormBoundaryXjfYhqOTqQagpQHN
Content-Disposition: form-data; name="file2"; filename="b.txt"
Content-Type: text/plain
1
2
3
------WebKitFormBoundaryXjfYhqOTqQagpQHN--
相关推荐
纯jsp,servlet版的文件上传与下载.同时可以上传两个文件,也可以自己修改下代码上传多个文件,这是本人的自己的代码,不是为了赚点积分,还真有点舍不得上传。工程名写成了了nostruts,是为了区分struts,用jsp写的
纯jsp+servlet实现文件上传,没有使用apache上传组件
NULL 博文链接:https://firezhfox.iteye.com/blog/1768278
使用mvc模式设计,jsp+servlet开发,同时可以上传两个文件,也可以自己修改下代码上传多个文件,在Servlet中使用开源fileupload包实现文件上传功能
是用servlet实现的一个考试系统, 功能齐全,MVC设计模式, 数据库为Sqserver 功能包括: ...5.文件上传下载 注意,此资源仅供学习使用不, 内容素材源于网上, 不做任何商业用途,请大家自重,尊重他人劳动成果!
(1)纯JSP代码,不使用任何Ajax等较复杂的技术。程序代码比采用Ajax简单N倍; (2)可上传任意类型、不限大小的文件;...若要支持Tomcat6.0以下版本,请在WEB-INF\web.xml中配置对应的Servlet文件即可。
5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...
5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...
5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...
3.2 生成纯文本的servlet 3.3 生成html的servlet 3.4 servlet的打包 3.5 简单的html构建工具 3.6 servlet的生命周期 3.7 singlethreadmodel接口 3.8 servlet的调试 第4章 客户请求的处理:表单数据 ...
5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...
登录注册,非法访问验证,博客的用户文章发布,心情说说,日志的增删改查,访客用户的管理,博客运行时间统计,博客书城的管理,图书的上架售卖以及结算(结算的功能还没写),纯手写前台页面,大概20左右个CSS,每...
封装好的2个java类和3个jsp页面示例。 接压后直接是一个eclipse的项目。 项目编码统一是gbk。 原始是在tomcat下跑,所以未包含servlet-api.jar
自己写项目写出来的SSM框架模板,纯原创。 需要可以自行购买,保证不亏。 遇到不懂得,可以私我留言。 =================================== 下面技术所需的所有配置及...5. shiro、lombok插件、文件上传 ......等等
接受客户端文件上传、下载文件 动态 Http API,像 Java 的 Servlet 一样写接口 部署静态网站,例如纯Html,支持 JS、CSS、Image 分离 部署动态网站 这需要依赖一个开源库来实现:AndServer A
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Struts2 和 hibernate 演示 jqGrid, 使用Action中的 代码可以容易的把jqGrid 用于servlet或纯jsp. Struts 2.16, jqGrid 3.5b, hibernate 3.2 annotation 由于我的上传权限为20M,而我上传上的包括所有的源代码和支持...
Dao Bean / Spring Bean装配、国际化、文件上传下载和缓存等基础Web应用组件,提供高度灵活的纯 Jsp/Servlet API 编程模型,完美整合 Spring,支持Action Convention“零配置”,能快速开发传统风格和RESTful风格的...
本人2年前手写的web博客系统,功能简单,可以发布文章、添加好友、发表评论、上传照片等,可供学习javaweb的初级程序员参考,内附数据库脚本文件blogs.sql,使用mysql数据库,不使用任何框架,由servlet完成功能跳转
JavaWeb小学期课程写的一个家居电子商城管理系统,没有spring框架,纯servlet,线上家居电子商城系统,主要实现了用户注册,登录、浏览,查看家居商品信息,购物车,订单,支付,查看通知以及管理员对用户信息的管理...