jsp图片上传(commons-fileupload组件)
Java使用Commons-FileUpload组件实现文件上传最佳方案

Java使⽤Commons-FileUpload组件实现⽂件上传最佳⽅案学习的⽬标使⽤commons-fileupload实现⽂件上传使⽤commons-fileupload封装⽂件上传⼯具类什么是commons-fileupload?The CommonsFileUploadpackage makes it easy to add robust, high-performance, file upload capability to your servlets and web applications.FileUpload parses HTTP requests which conform toRFC 1867, "Form-based File Upload in HTML". That is, if an HTTP request is submitted using the POST method, and with a content type of "multipart/form-data", then FileUpload can parse that request, and make the results available in a manner easily used by the caller.FileUpload包可以很容易地添加强⼤的,⾼性能,⽂件上传到你的Servlet的Web应⽤程序的能⼒。
FileUpload解析HTTP请求符合RFC 1867年,“在HTML的⽂件上传。
就是说,如果⼀个HTTP请求是使⽤POST⽅法提交,并与⼀个内容类型“multipart/form-data”,然后FileUpload可以解析这个请求,并把结果提供⼀个容易使⽤的调⽤⽅式。
为什么要使⽤commons-fileupload在使⽤传统的Servlet上传的时候我们可以使⽤req.getInputStream()来获取⽂件上传的流,我们在获取到这个流之后需要⼿动的针对这个流进⾏特殊处理进⾏去流中不必要的开始和结束内容,才能真正的获取到流的内容,本章节并不对原始Servlet的上传进⾏探究,我们另开章节针对原始Servelt上传进⾏探究。
图片上传的设计与实现

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊图片上传的设计与实现二.设计目的运用jsp开发工具和数据库开发一个小型的基于Web系统。
要求提交详细的设计说明书及各步骤所需图表和文档,对复杂的代码段和程序段,应画出程序流程图。
在界面设计中,画出每个窗口的布局。
通过本实践性教学环节,能较好地巩固jsp基本知识,jsp连接数据库实现动态网页。
三.需求分析如今时代,互联网已经进入我们的生活,而互联网上就有图片上传,显示,访问等等功能,有着很大的市场空间。
图片上传必须实现:1.数据库访问模块:利用JavaBean封装对数据库的操作,主要包括连接数据库、添加、删除、查询数据表、关闭连接等功能;2.上传模块:通过上传组件实现图片的上传。
3.显示模块:提供图片信息列表的显示效果。
4.查看模块:点击可以显示图片的内容。
四.总体设计图片上传是指客户端通过Web应用程序将本地图片资源传输到服务器上。
在客户端需要显示图片时,服务器端将图片通过网络以流的形式发送给客户端,然后利用不同的形式显示图片。
图片上传必须要对电子相册有,用户注册,用户注册,添加相片,修改相册,用户反馈,管理用户,如图1所示。
图1 总体设计┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1.文件上传组件介绍文件上传组件是一些开源组织发布的针对实现文件上传功能的一组class 文件。
jspSmartUpload和Apache的common-fileupload是两个比较流行的文件上传组件。
这两个组件都可以在JSP中实现文件上传。
本节使用Apache的common-fileupload组件实现图片上传。
2.HTML中文件上传组件介绍HTML中<input type="file"/>元素可以创建文件上传组件。
该控件带有一个文本框和浏览按钮。
使用该组件时要注意以下几点。
使用commons-fileupload处理HTTP文件上传

使用commons-fileupload处理HTTP文件上传
刘冬
【期刊名称】《开放系统世界》
【年(卷),期】2003(000)006
【摘要】Commom是Apache开放源代码组织中的一个Java子项目,该项目主要涉及一些开发中常用的模块。
例如文件上传、命令行处理、数据库连接池、XML配置文件处理等。
这些项目集合了来自世界各地软件工程师的心血,其性能、稳定性等方面都经受得住实际应用的考验。
有效地利用这些项目将会给开发带来显而易见的效果。
Fileupload就是其中用来处理HTTP文件上传的子项目。
本文主
要介绍如何使用Fileupload来处理浏览器提交到服务器的文件信息。
【总页数】3页(P99-101)
【作者】刘冬
【作者单位】无
【正文语种】中文
【中图分类】TP391.1
【相关文献】
1.基于HTTP文件上传进度显示组件的设计及实现 [J], 段旭光;李岚;董立岩;臧雪
柏
2.SolarWinds Orion NPM中使用HTTPS [J], 何今成;杜致远
3.基于HTTP协议和数据库的文件上传方法 [J], 黄景文
4.让Gmail始终使用https连接 [J], 王勇
5.如何设置证书来使用IIS 7 HTTPS? [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
关于Commons-fileupload的上传组件

关于Commons-fileupload的上传组件Apache的上传组件其它已经被封装到Struts那中去了,我在网上找到了一些文章介绍它是如何上传文件的,自己跟了一下源码也写了一个上传的实例,仅供参考!一、JSP页面如下:Html代码1<form method="POST" action="UploadServlet"2 ENCTYPE="multipart/form-data">3<table>4<tr><td><input type="text" name="subject" /></td></tr> 5<tr><td><input type="text" name="subject" /></td></tr> 6<tr><td><input type="file" name="file1" /></td></tr>7<tr><td><input type="file" name="file2" /></td></tr>8<tr><td><input type="file" name="file3" /></td></tr>9<tr><td><input type="submit" value="上传"/></td></tr> 10</table>11</form>12<br/>13<a href="DownLoadServlet">下载</a>二、上传的Servlet如下:Java代码14/**15 * Apache组件上传16 *17 * @author mingxue.zhang@18 * @date 2010-10-3019 */20public class UploadServlet extends HttpServlet {2122private static final long serialVersionUID = 5827821285414610443L;2324public void doGet(HttpServletRequest request, HttpServletResponse response)25throws ServletException, IOException {26this.doPost(request, response);27 }2829public void doPost(HttpServletRequest request, HttpServletResponse response)30throws ServletException, IOException {31 // 上传文件目录32 String uploadDir =this.getServletContext().getRealPath("/uploadDir");33 DiskFileItemFactory factory = new DiskFileItemFactory();34 // 设置内存区块大小4KB35 factory.setSizeThreshold(4 * 1024);36 // 设置暂存容器,当上传文件大于设置的内存块大小时,用暂存容器做中转37 factory.setRepository(newFile(this.getServletContext().getRealPath(38 "/temp")));39 ServletFileUpload fileUpload = new ServletFileUpload(factory);40 fileUpload.setSizeMax(1024 * 1024 * 100);41 fileUpload.setFileSizeMax(1024 * 1024 * 10);42 List<FileItem> fileItemList = null;4344try {45 fileItemList = fileUpload.parseRequest(request);46 } catch (FileUploadException e) {47 e.printStackTrace();48 }49 Iterator<FileItem> fileItemIterator = fileItemList.iterator();50 FileItem fileItem = null;51while (fileItemIterator.hasNext()) {52 fileItem = fileItemIterator.next();53 // 普通文件框上传54if (fileItem.isFormField()) {55 String filedName = fileItem.getFieldName();56 String filedValue = fileItem.getString("GBK");// 编码格式57 System.out.println(filedName);// 文件框名称58 System.out.println(filedValue);// 文件的值59 } else {60 String filedName = fileItem.getFieldName();// 文件上传框的名称61 // 获取文件上传的文件名62 String OriginalFileName =takeOutFileName(fileItem.getName());63 System.out.println("原始文件名:"+OriginalFileName);64if (!"".equals(OriginalFileName)) {65 // 根据上传的文件名重新命名66 String newFileName =getNewFileName(OriginalFileName);67 System.out.println("重新名:"+newFileName);68 File writeToFile = new File(uploadDir + File.separator69 + newFileName);70try {71 fileItem.write(writeToFile);72 } catch (Exception e) {73 e.printStackTrace();74 }75 }76 }77 }78 }7980private String takeOutFileName(String filePath) {81 String fileName = filePath;82if (null != filePath && !"".equals(filePath)) {83int port = stIndexOf("\\" + 1);84if(port != -1){85 fileName = filePath.substring(port);86 }87 }88return fileName;89 }9091private String getNewFileName(String originalFileName) {92 StringBuffer newFileName = new StringBuffer();93if (null != originalFileName && !"".equals(originalFileName)) { 94int port = stIndexOf(".");95 String type = "";96 String fileName = "";97if (port != -1) {98 type = originalFileName.substring(port + 1);99 fileName = originalFileName.substring(0, port);100 } else {101 fileName = originalFileName;102 }103 StringBuffer suffix = new StringBuffer("_");104 suffix.append(Calendar.getInstance().getTimeInMillis()); 105 suffix.append("_");106 suffix.append(new Random().nextInt(100));107 newFileName.append(fileName);108 newFileName.append(suffix);109 newFileName.append(".");110 newFileName.append(type);111 }112return newFileName.toString();113 }114115}三、下载的Servlet如下:Java代码116/**117 * Apache组件下载118 *119 * @author mingxue.zhang@120 * @date 2010-10-30121 */122public class DownLoadServlet extends HttpServlet {123124public void doGet(HttpServletRequest request, HttpServletResponseresponse)125throws ServletException, IOException {126this.doPost(request, response);127 }128129public void doPost(HttpServletRequest request, HttpServletResponse response)130throws ServletException, IOException {131 String filePath ="D:\\Tomcat\\apache-tomcat-6.0.26\\webapps\\ApacheUpload\\uploadDir\\";132 String fileName = "2010年10月安排2_1288447490125_56.txt";133 String Originalname = "2010年10月安排2.txt";134 response.setContentType("application/octet-stream");135 String isoFileName = new String(Originalname.getBytes("GB2312"), 136 "ISO8859-1");137 response.setHeader("Content-Disposition", "attachment; filename="138 + isoFileName);139 ServletOutputStream out = response.getOutputStream();140 BufferedOutputStream bufferOut = new BufferedOutputStream(out);141 FileInputStream inputStream = new FileInputStream(newFile(filePath,142 fileName));143 BufferedInputStream bufferInput = newBufferedInputStream(inputStream);144byte[] buffer = new byte[5 * 1024];145int length = 0;146while ((length = bufferInput.read(buffer)) != -1) {147 bufferOut.write(buffer, 0, length);148 }149 bufferInput.close();150 inputStream.close();151 bufferOut.close();152 out.close();153 }154155}Servlet配置如下:Xml代码156<servlet>157<servlet-name>UploadServlet</servlet-name>158<servlet-class>com.mengya.servlet.UploadServlet</servlet-class> 159</servlet>160<servlet>161<servlet-name>DownLoadServlet</servlet-name>162<servlet-class>com.mengya.servlet.DownLoadServlet</servlet-class>163</servlet>164165<servlet-mapping>166<servlet-name>UploadServlet</servlet-name>167<url-pattern>/UploadServlet</url-pattern>168</servlet-mapping>169<servlet-mapping>170<servlet-name>DownLoadServlet</servlet-name>171<url-pattern>/DownLoadServlet</url-pattern>172</servlet-mapping>。
使用Commons-fileupload.jar实现文件的上传和下载

文件上传和下载
javaweb文件上传简单介绍
文件的上传和下载在企业级应用中很常见,javaee通常使用commons-fileupload.jar配合commons-io.jar实现文件的上传下载。
具体实现过程如下
准备相应的jar包,并且导入。
写带有文件表单的上传文件的jsp页面,以及处理的后台servlet。
文件的下载
下载就是向客户端响应字节数据!
原来我们响应的都是HTML字符数据!
把一个文件编程字节数组:使用response.getOutputStream()
文件下载操作,最重要的步骤:两个头一个流
第一个头:Content-type:你传递给客户端的文件是什么MIME类型,例如:image/pjpeg
第二个头;Content-Disosition:它的默认值是inline,表示在浏览器窗口中打开!attachment;filename=xxx
流:要下载的文件数据
Attachment翻译为附件
下载的具体编码。
Commons FileUpload组件在网上投稿系统中的应用

摘要 : 文件 土 传是 很 多 W E B应 用 q 都 需要 的 功 能 。 基 于表 单 的 文件 上 传 和 C mmo s i Upo d两 个 方 面 , 究 了 文件 上 传 的原 - 从 o n l la Fe 研 理 和 实现 机 制 . 网上 投 稿 系统 实 际应 用 中 , 出了使 用 Co lln F e po d组 件 的 Sra n P 将 文 件 保 存 到 My Q 在 给 niO S i U la i l t migA I e S L数 据 库
络 开 发 文 件 上 传 的 首 选 组 件 之 一 。 另 一个 比 较 有 名 的 文 件上 传组 件 足 S a U l d { j m r po ,很 多 J P书 籍 中介 绍 的文 件 上 传 都 是 使 用 t a S
S r pod组 件 ( 官方 网站 已经 无 法 打 开 了 ) 很 多 用 户 反 映 S at po d在 某 些 情 况 下并 小 能 很 好 的 工 作 。 ma U la t 其 , mr ] U a C m o s i U la o m n l pod可 以 从 ht:emm n . a h _ 0 no d /o n0 ( i c i 载 。 网 上 投 稿 系 统 以 T m a 做 J v b应 Fe t / o o s p ce ) d w l s w l 1 o g 下 p/ a 1 r a d d -一 . o ct a aWe 用容器 , 解 下 载 的义 件 , l 1 件 夹 里 cmm n — l pod x -_ 义 件 复 制 到 T mct 把 i文 } o o s fe l — . x i u a X o a 的安 装 目录 下 的 cmm nl 目录下 。 o o/b i 解压
jsp之文件上传和下载

很多初学jsp的同志都在实现文件上传到服务器或者从服务器上下载文件到本地计算机这方面不是很了解,今天在这里我会帮助大家慢慢的实现这一功能。
准备工作:1.到网上下载两个包第一个叫做commons-fileupload-1.2.1.jar第二个叫做commons-io-1.3.2.jar2. 建一个项目用来实现文件上传和下载我创建的Web项目名为fileUpload,截图如下3.我们把从网上下载下来的包copy到WebRoot目录下Web-INF下的子目录lib目录里然后打开Referenced Libraries,你会看见两个包已经存在于里面了。
下面我们开始实现文件上传1. 首先我们创建一个名为uploadFile.jsp的页面,如下图:点击浏览,可以出现以下画面源代码如下:<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%> <%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+ ":" +request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>实现文件上传到服务器</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"> <meta http-equiv="description"content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form action="doFileUpload.jsp"method="post"enctype="multipart/form-data">文件:<input type="file"name="chooseFile"/></br>姓名:<input type="text"name="userName"/></br><input type="submit"value="提交"></form></body></html>注意:form表单里的enctype=”multipart/form-data”这一属性一定要写,这是用来标明此表单的类型是文件类型的。
common fileupload详解

Commons-fileupload工具的API与开发实例解析(一)文件上传组件的应用与编写在许多Web站点应用中都需要为用户提供通过浏览器上传文档资料的功能,例如,上传邮件附件、个人相片、共享资料等。
对文件上传功能,在浏览器端提供了较好的支持,只要将FORM表单的enctype属性设置为“multipart/form-data”即可;但在Web服务器端如何获取浏览器上传的文件,需要进行复杂的编程处理。
为了简化和帮助Web开发人员接收浏览器上传的文件,一些公司和组织专门开发了文件上传组件。
本章将详细介绍如何使用Apache文件上传组件,以及分析该组件源程序的设计思路和实现方法。
1.1 准备实验环境按下面的步骤为本章的例子程序建立运行环境:(1)在Tomcat 5.5.12的<tomcat的安装目录>\webapps目录中创建一个名为fileupload的子目录,并在fileupload目录中创建一个名为test.html的网页文件,在该文件中写上“这是test.html页面的原始内容!”这几个字符。
(2)在<tomcat的安装目录>\webapps\fileupload目录中创建一个名为WEB-INF 的子目录,在WEB-INF目录中创建一个名为classes的子目录和一个web.xml文件,web.xml文件内容如下:<web-app></web-app>(3)要使用Apache文件上传组件,首先需要安装Apache文件上传组件包。
在<tomcat的安装目录>\webapps\fileupload\WEB-INF目录中创建一个名为lib的子目录,然后从网址/commons/fileupload下载到Apache组件的二进制发行包,在本书的附带带光盘中也提供了该组件的二进制发行包,文件名为commons-fileupload-1.0.zip。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.开发环境:
1)eclipse3.2+tomcat5.5;
2)创建dynamic web project;
3)下载:
Commons FileUpload 可以在/commons/fileupload/下载
附加的Commons IO 可以在/commons/io/下载
将commons-fileupload-1.2.1.jar commons-io-1.4.jar拷贝到WebContent\WEB-INF\\lib 目录;
2.前台:
<;form method=";post"; enctype=";multipart/form-data"; action=";upload.jsp"; target=";_blank";>;
<;%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传--%>;
<;table>;
<;tr>;<;td>;作品:<;input type=";file"; name=";upfile"; size=";50";>;<;/td>;<;/tr>;
<;tr>;<;td>;作者:<;input type=";text"; name=";author"; size=";22";>;
标题:<;input type=";text"; name=";title"; size=";22";>;
<;input type=";submit"; name=";submit"; value=";上传";>;<;/td>;<;/tr>;
<;tr>;<;td>;备注:上传的jpg图片(显示扩展名为.jpg)大小不能超过4M!<;/td>;<;/tr>; <;/table>;
<;/form>;
3.后台:
1)引用:
<;%@ page import=";mons.fileupload.servlet.ServletFileUpload";%>; <;%@ page import=";mons.fileupload.disk.DiskFileItemFactory";%>; <;%@ page import=";mons.fileupload.*";%>;
2)代码:
String id=null;//上传记录id
String destinationfileName=null;//目标文件名
String author=null;
String title=null;
int flag=0;//上传标志
String uploadPath =request.getSession().getServletContext().getRealPath(";/";)+";upload/";;//图片上传路径
String tempPath = request.getSession().getServletContext().getRealPath(";/";)+";upload/temp/";;//图片临时上传路径
String
imagePath=request.getScheme()+";://";+request.getServerName()+";:";+request.getS erverPort()+request.getContextPath()+";/";; // 图片网络相对路径
if(!new File(uploadPath).isDirectory()) new File(uploadPath).mkdirs();// 文件夹不存在就自动创建:
if(!new File(tempPath).isDirectory())new File(tempPath).mkdirs();
try {
DiskFileUpload fu = new DiskFileUpload();
fu.setSizeMax(4194304);// 设置最大文件尺寸,这里是4MB
fu.setSizeThreshold(4096);// 设置缓冲区大小,这里是4kb
fu.setRepositoryPath(tempPath);// 设置临时目录:
List fileItems = fu.parseRequest(request);// 得到所有的文件:
Iterator i = fileItems.iterator();
while(i.hasNext()) {// 依次处理表单中每个域
FileItem file = (FileItem)i.next();// 获得用户上传时文件名
if (file.isFormField()){ //获得文本域表单数据
if(";author";.equals(file.getFieldName()))
author=codeToString(file.getString());
if(";title";.equals(file.getFieldName())) title=codeToString(file.getString()); continue;//非file域不处理
}
String sourcefileName = file.getName();
if( sourcefileName.endsWith(";.jpg";)){//生成上传后的文件名
Random rd = new Random();
Calendar time = Calendar.getInstance();
id=String.valueOf(time.get(Calendar.YEAR))
+ String.valueOf(time.get(Calendar.MONTH)+1)
+ String.valueOf(time.get(Calendar.DAY_OF_MONTH))
+ String.valueOf(time.get(Calendar.HOUR_OF_DAY))
+ String.valueOf(time.get(Calendar.MINUTE))
+ String.valueOf(time.get(Calendar.SECOND))
+ String.valueOf(rd.nextInt(100));
destinationfileName=id+";.jpg";;
File fTmp=new File(uploadPath+destinationfileName);
file.write(fTmp);
//out.print(";<;img src=";+imagePath+";upload/";+destinationfileName+";>;";); flag=1;//上传成功标志1
}else{out.print(";上传失败,只能上传jpg文件!";); }
}
//out.print(";<;script>;location.href=\";demo.jsp\";;<;/script>;";);
}catch (IOException e) {out.print(";上传失败!";);}
out.flush();
out.close();
4.主要解决点:
1)问题:form设置enctype=";multipart/form-data";,request.getParameters函数无法获取表单域值;
2)解决方案:
if (file.isFormField()){ //获得文本域表单数据
if(";author";.equals(file.getFieldName()))
author=codeToString(file.getString());
if(";title";.equals(file.getFieldName())) title=codeToString(file.getString()); continue;//非file域不处理
}。