使用FileUpload jar包上传文件的例子。

来源:互联网 发布:搜狗seo关键词优化 编辑:程序博客网 时间:2024/05/20 11:36

工具包:使用必须导入  commons-fileupload-1.2.1.jar 和 commons-io-1.4.jar(导入这个是因为fileupload包依赖于它)

下载地址:http://download.csdn.net/detail/qqahanson/8260931


直接贴代码了:

jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>  <script type="text/javascript">  function add(){  var div = document.getElementById("addDiv");  div.innerHTML+="<div>上传文件<input type='file' name='upload'/><input type='button' id='delbut' value='删除' onclick='del(this)' /><br></div>";  }  function del(obj){  //删除这一行  var div = obj.parentNode;  div.parentNode.removeChild(div);  }  </script>  </head>  <body>  <form action="${pageContext.request.contextPath }/servlet/Update" method="post" enctype="multipart/form-data">  文件信息<input type="text" name="info"/>  <input type="button" id="but" value="加一个" onclick="add()"/><br>  上传文件<input type='file' name='upload'/><br>  <div id="addDiv"></div>  <input type="submit" value="上传"/>  </form>  </body></html>

处理上传servlet

import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.ProgressListener;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class Update extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//传输长度int l = request.getIntHeader("Content-Length");try {String info = request.getParameter("info");System.out.println(info);// 创建工厂DiskFileItemFactory factory = new DiskFileItemFactory();//设置内存缓存上传文件的大小  超出这个值就放入硬件缓存factory.setSizeThreshold(1024 * 10);//设置上传文件在服务器缓存路径factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));final Long time = System.currentTimeMillis();// 利用工厂创建上传核心类ServletFileUpload upload = new ServletFileUpload(factory);//监听器  可以用于做进度条等upload.setProgressListener(new ProgressListener(){//bytesRead:当前已经上传完成的字节数//contentLength:需要上传的字节(总的字节数)//items:当前上传的内容在提交上来的表单中的位置,是第几个public void update(long bytesRead, long contentLength, int items) {//System.out.print("已经读取到的字节数:"+bytesRead+" 共有字节数:"+contentLength+" 在表单中的位置:"+items);System.out.print(" 上传进度"+(double)bytesRead/contentLength);Long time2 = System.currentTimeMillis();System.out.print(" 上传速度为(KB/s)"+bytesRead/(time2-time) );System.out.print(" 大约剩余时间:"+(contentLength-bytesRead)/(bytesRead/(time2-time)));System.out.println();}});//upload.setFileSizeMax(1024*100);//单个上传的最大值//upload.setSizeMax(1024*1024);//总的最大值//设置编码 防止文件名乱码upload.setHeaderEncoding("utf-8");// 利用核心类解析requestList<FileItem> list = upload.parseRequest(request);if (upload.isMultipartContent(request)) {// 遍历集合,获取所有的FIleItemfor (FileItem item : list) {if (item.isFormField()) {// 如果当前的FileItem封装到是一个普通的请求参数,则返回true//获取字段名String name = item.getFieldName();//取值String value = item.getString("utf-8");System.out.println(name + ":" + value);} else {// 说明这个FileItem中保存是上传的文件String fileName = item.getName();// 获取上传文件的名称if(fileName == null ||fileName==""){throw new RuntimeException("文件名不能为空");}if(fileName.contains("\\")){//fileName 获得的是全文件名  包括路径   应该只截取文件名字fileName = fileName.substring(fileName.lastIndexOf("\\")+1);}InputStream in = item.getInputStream();// 获取文件内容流System.out.println("上传文件:" + fileName);//创建上传目录String path = this.getServletContext().getRealPath("/update/"+request.getRemoteAddr());new File(path).mkdirs();//UUID.randomUUID() 生成唯一识别号  防止重复FileOutputStream out = new FileOutputStream(path + "/"+ UUID.randomUUID().toString()+"_"+fileName);// 将上传的文件保存到指定位置int i = 0;while ((i = in.read()) != -1) {out.write(i);}in.close();out.close();//删除缓存文件item.delete();}}}else{}} catch (FileUploadException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米6用久了很卡怎么办 淘宝商家发错误的退货地址怎么办 买苹果手机时查到了翻新机该怎么办 荣耀9青春版玩王者卡怎么办 红米4x手机声音突然成破音怎么办 红米pro玩王者荣耀卡怎么办 红米手机恢复出厂设置出错了怎么办 红米恢复出厂设置出错了怎么办 应聘工作上当收押金了该怎么办 红米1s密码忘了怎么办 红米1s刷机后开不了机怎么办 红米2a耗电超快怎么办 红米2a手机耗电快怎么办 红米4x触屏失灵怎么办 苹果恢复出厂设置后密码忘记怎么办 红米1s忘记密码锁屏了怎么办 红米3手机忘记解锁图案怎么办 小米5x手机录屏失败怎么办 红米4x手机wif信号不好怎么办 红米4x屏幕换了截屏不好使怎么办 红米手机2a卡慢怎么办? 红米手机连接无线网信号不好怎么办 小米4用久了很卡怎么办 红米4a关不了机怎么办 红米手机屏幕锁了忘记密码怎么办 手机锁了忘记密码怎么办 红米 红米4a开不开机怎么办 红米显示小人开不了机怎么办 红米手机找回微信密码怎么办 红米手机密码忘了怎么办数字锁 红米1s忘了密码怎么办 红米手机下面三个键失灵怎么办 红米note手机没声音了怎么办 魅蓝3s被锁了怎么办 小米5x的4g网速慢怎么办 红米一体机与后盖有裂缝怎么办? 红米4x喇叭坏了怎么办 红米4x电池坏了怎么办 小米电视4a开不了机怎么办 小米x4手机下面三个键失灵怎么办 红米4a一直重启怎么办