- 浏览: 32317 次
- 性别:
- 来自: 山东
最新评论
package com.XXX.xheditor.servlet; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; 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.DiskFileUpload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang.StringUtils; // xhEditor文件上传的Java - Servlet实现. // @ author WeiMiao // @ refer to easinchu // @ version 2 // @ description 增加html5上传功能的支持 public class UploadFileServlet extends HttpServlet { private static final long serialVersionUID = 1541334866883495283L; private static String baseDir = "/UploadFile/"; // 上传文件存储目录 private static String fileExt = "jpg,jpeg,bmp,gif,png"; private static Long maxSize = 0l; private static String dirType = "1"; // 0:不建目录 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存 public void init() throws ServletException { baseDir = this.getInitParameter("baseDir"); //获取web.xml中servlet的配置文件目录参数 if (StringUtils.isEmpty(baseDir)) baseDir = "/UploadFile/"; //获取文件上传存储的相当路径 String realBaseDir = this.getServletConfig().getServletContext().getRealPath(baseDir); File baseFile = new File(realBaseDir); if (!baseFile.exists()) { baseFile.mkdir(); } fileExt = this.getInitParameter("fileExt"); //获取文件类型参数 if (StringUtils.isEmpty(fileExt)) fileExt = "jpg,jpeg,gif,bmp,png"; String maxSize_str = this.getInitParameter("maxSize"); //获取文件大小参数 if (StringUtils.isNotEmpty(maxSize_str)) { maxSize = new Long(maxSize_str); } else { maxSize = Long.valueOf("5242880"); //5M } dirType = this.getInitParameter("dirType"); //获取文件目录类型参数 if (StringUtils.isEmpty(dirType)) dirType = "1"; if (",0,1,2,3,".indexOf("," + dirType + ",") < 0) dirType = "1"; } // 上传文件数据处理过程 @SuppressWarnings( { "unchecked" }) public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); String err = ""; String newFileName = ""; if ("application/octet-stream".equals(request.getContentType())) { //HTML 5 上传 try { String dispoString = request.getHeader("Content-Disposition"); int iFindStart = dispoString.indexOf("name=\"")+6; int iFindEnd = dispoString.indexOf("\"", iFindStart); iFindStart = dispoString.indexOf("filename=\"")+10; iFindEnd = dispoString.indexOf("\"", iFindStart); String sFileName = dispoString.substring(iFindStart, iFindEnd); int i = request.getContentLength(); byte buffer[] = new byte[i]; int j = 0; while(j < i) { //获取表单的上传文件 int k = request.getInputStream().read(buffer, j, i-j); j += k; } if (buffer.length == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && buffer.length > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(sFileName, response); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 OutputStream out=new BufferedOutputStream(new FileOutputStream(this.getServletConfig().getServletContext().getRealPath("") + filepathString,true)); out.write(buffer); out.close(); newFileName = request.getContextPath() + filepathString; } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } else { DiskFileUpload upload = new DiskFileUpload(); try { List<FileItem> items = upload.parseRequest(request); Map<String, Serializable> fields = new HashMap<String, Serializable>(); Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) fields.put(item.getFieldName(), item.getString()); else fields.put(item.getFieldName(), item); } FileItem uploadFile = (FileItem) fields.get("filedata"); //获取表单的上传文件 String fileNameLong = uploadFile.getName(); //获取文件上传路径名称 if (uploadFile.getSize() == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && uploadFile.getSize() > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(fileNameLong, response); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 File savefile = new File(this.getServletConfig().getServletContext().getRealPath("") + filepathString); uploadFile.write(savefile); //存储上传文件 newFileName = request.getContextPath() + filepathString; } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } printInfo(response, err, newFileName); } public String getSaveFilePath(String sFileName, HttpServletResponse response) throws IOException { String extensionName = sFileName.substring(sFileName.lastIndexOf(".") + 1); //获取文件扩展名 if (("," + fileExt.toLowerCase() + ",").indexOf("," + extensionName.toLowerCase() + ",") < 0) { //检查文件类型 printInfo(response, "不允许上传此类型的文件", ""); return "不允许上传此类型的文件"; } String fileFolder = ""; // 0:不建目录, 1:按天存入目录, 2:按月存入目录, 3:按扩展名存目录.建议使用按天存。 if (dirType.equalsIgnoreCase("1")) fileFolder = new SimpleDateFormat("yyyyMMdd").format(new Date()); if (dirType.equalsIgnoreCase("2")) fileFolder = new SimpleDateFormat("yyyyMM").format(new Date()); if (dirType.equalsIgnoreCase("3")) fileFolder = extensionName.toLowerCase(); String saveDirPath = baseDir + fileFolder + "/"; //文件存储的相对路径 String saveFilePath = this.getServletConfig().getServletContext().getRealPath("") + saveDirPath; //文件存储在容器中的绝对路径 File fileDir = new File(saveFilePath); //构建文件目录以及目录文件 if (!fileDir.exists()) { fileDir.mkdirs(); } String filename = UUID.randomUUID().toString(); //重命名文件 return saveDirPath + filename + "." + extensionName; } // 使用I/O流输出 json格式的数据 public void printInfo(HttpServletResponse response, String err, String newFileName) throws IOException { response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println("{\"err\":\"" + err + "\",\"msg\":\"" + newFileName + "\"}"); out.flush(); out.close(); } }
发表评论
-
DOM Core常用部分
2013-02-22 09:27 1023DOM方法创建节点:createElement(),cre ... -
Select选中项
2011-11-23 15:43 883方法一: html源码: <select n ... -
FCKeditor: 返回自动加入html代码问题的解决方法
2011-11-22 17:03 957使用FCKeditor编辑文章,有时候出于某种原因,提交失败了 ... -
开源文档播放器
2011-10-23 11:09 790播放器及组件下载地址:http://code.google.c ... -
JAVA去除A标签和IMG标签
2011-10-10 19:10 6996public static void main(String ... -
JAVA去除HTML代码
2011-10-10 17:36 702import java.util.regex.Matcher; ... -
JAVA制作缩略图
2011-10-10 17:19 850package graphicsTest; import ... -
lucene与庖丁解牛简单示例
2011-10-10 11:35 4967首先是建立索引的类文件: package com ...
相关推荐
HTML5上传for php
HTML5上传图手机图片压缩,兼容iso android
HTML5上传组件,可批量上传也可单个上传,并显示上传进度
html5上传视频和图片 可预览上传,支持多文件上传, HTML5+js 文件想小,简单好用。后端结合PHP等语言。
html5 通过调用手机的照相机,拍照上传图片
基于Ajax的Flash、HTML5上传组件(支持C#)。完整DEMO
html5上传插件支持文件上传和图片上传代码 html5上传插件支持文件上传和图片上传代码
HTML5头像上传,抛弃FLASH方法 支持手机版!支持手机版!支持手机版!(非“新触屏版”) 支持UCenter与论坛不在同一域名下(支持跨域)
这个是基于某个同志的资源...另外由于缓存资源的原因没有考虑上传按钮的添加,上传图片即上传,ajax为异步请求。 至于后台是C#没啥好看的,就是数据库插入 这里小小的向大家要1分,不要骂我,下东西都没分了,拜谢。
Html5上传图片前生成本地预览,可以在本地预览图片,再上传到服务器
HTML5上传多图片,大家可以看下呃
PHP+Html5上传demo带预览、进度条,挺好用的.zip
html5 上传文件 分片上传 有点简单 大家凑合看下 自己调试下
html5上传图片编辑滤镜调色效果 html5上传图片编辑滤镜调色效果
NULL 博文链接:https://xiaojin21cen.iteye.com/blog/2203429
jquery html5上传图片插件头像截图图像截取上传表单 jquery html5上传图片插件头像截图图像截取上传表单
使用百度webuploader,支持flash&html5上传for asp.net,支持手机端上传,支持session传值或时间生成文件夹。会压缩图片,如需无限制请参考API开放。
html5上传图片拖动剪切头像截图插件代码 html5上传图片拖动剪切头像截图插件代码
html5手机页面选择相册图片上传表单提交html5手机页面选择相册图片上传表单提交
这是一款手机网站选择图片上传并且显示,HTML5手机身份证上传表单代码,适应各种手机端微信端表单提交。