首页>代码>java servlet+mybatis整合bootstrap3开发java web新闻发布系统>/Prohzj2017/WebRoot/umeditor/jsp/Uploader.java
package com.baidu.ueditor.um; import java.io.*; import java.text.SimpleDateFormat; import java.util.*; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.FileUploadBase.InvalidContentTypeException; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import org.apache.commons.fileupload.util.*; import org.apache.commons.fileupload.servlet.*; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import sun.misc.BASE64Decoder; import javax.servlet.http.HttpServletRequest; /** * UEditor文件上传辅助类 * */ public class Uploader { // 输出文件地址 private String url = ""; // 上传文件名 private String fileName = ""; // 状态 private String state = ""; // 文件类型 private String type = ""; // 原始文件名 private String originalName = ""; // 文件大小 private long size = 0; private HttpServletRequest request = null; private String title = ""; // 保存路径 private String savePath = "upload"; // 文件允许格式 private String[] allowFiles = { ".rar", ".doc", ".docx", ".zip", ".pdf",".txt", ".swf", ".wmv", ".gif", ".png", ".jpg", ".jpeg", ".bmp" }; // 文件大小限制,单位KB private int maxSize = 10000; private HashMap<String, String> errorInfo = new HashMap<String, String>(); public Uploader(HttpServletRequest request) { this.request = request; HashMap<String, String> tmp = this.errorInfo; tmp.put("SUCCESS", "SUCCESS"); //默认成功 tmp.put("NOFILE", "未包含文件上传域"); tmp.put("TYPE", "不允许的文件格式"); tmp.put("SIZE", "文件大小超出限制"); tmp.put("ENTYPE", "请求类型ENTYPE错误"); tmp.put("REQUEST", "上传请求异常"); tmp.put("IO", "IO异常"); tmp.put("DIR", "目录创建失败"); tmp.put("UNKNOWN", "未知错误"); } public void upload() throws Exception { boolean isMultipart = ServletFileUpload.isMultipartContent(this.request); if (!isMultipart) { this.state = this.errorInfo.get("NOFILE"); return; } DiskFileItemFactory dff = new DiskFileItemFactory(); String savePath = this.getFolder(this.savePath); dff.setRepository(new File(savePath)); try { ServletFileUpload sfu = new ServletFileUpload(dff); sfu.setSizeMax(this.maxSize * 1024); sfu.setHeaderEncoding("utf-8"); FileItemIterator fii = sfu.getItemIterator(this.request); while (fii.hasNext()) { FileItemStream fis = fii.next(); if (!fis.isFormField()) { this.originalName = fis.getName().substring(fis.getName().lastIndexOf(System.getProperty("file.separator")) + 1); if (!this.checkFileType(this.originalName)) { this.state = this.errorInfo.get("TYPE"); continue; } this.fileName = this.getName(this.originalName); this.type = this.getFileExt(this.fileName); this.url = savePath + "/" + this.fileName; BufferedInputStream in = new BufferedInputStream(fis.openStream()); File file = new File(this.getPhysicalPath(this.url)); FileOutputStream out = new FileOutputStream( file ); BufferedOutputStream output = new BufferedOutputStream(out); Streams.copy(in, output, true); this.state=this.errorInfo.get("SUCCESS"); this.size = file.length(); //UE中只会处理单张上传,完成后即退出 break; } else { String fname = fis.getFieldName(); //只处理title,其余表单请自行处理 if(!fname.equals("pictitle")){ continue; } BufferedInputStream in = new BufferedInputStream(fis.openStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuffer result = new StringBuffer(); while (reader.ready()) { result.append((char)reader.read()); } this.title = new String(result.toString().getBytes(),"utf-8"); reader.close(); } } } catch (SizeLimitExceededException e) { this.state = this.errorInfo.get("SIZE"); } catch (InvalidContentTypeException e) { this.state = this.errorInfo.get("ENTYPE"); } catch (FileUploadException e) { this.state = this.errorInfo.get("REQUEST"); } catch (Exception e) { this.state = this.errorInfo.get("UNKNOWN"); } } /** * 接受并保存以base64格式上传的文件 * @param fieldName */ public void uploadBase64(String fieldName){ String savePath = this.getFolder(this.savePath); String base64Data = this.request.getParameter(fieldName); this.fileName = this.getName("test.png"); this.url = savePath + "/" + this.fileName; BASE64Decoder decoder = new BASE64Decoder(); try { File outFile = new File(this.getPhysicalPath(this.url)); OutputStream ro = new FileOutputStream(outFile); byte[] b = decoder.decodeBuffer(base64Data); for (int i = 0; i < b.length; ++i) { if (b[i] < 0) { b[i] += 256; } } ro.write(b); ro.flush(); ro.close(); this.state=this.errorInfo.get("SUCCESS"); } catch (Exception e) { this.state = this.errorInfo.get("IO"); } } /** * 文件类型判断 * * @param fileName * @return */ private boolean checkFileType(String fileName) { Iterator<String> type = Arrays.asList(this.allowFiles).iterator(); while (type.hasNext()) { String ext = type.next(); if (fileName.toLowerCase().endsWith(ext)) { return true; } } return false; } /** * 获取文件扩展名 * * @return string */ private String getFileExt(String fileName) { return fileName.substring(fileName.lastIndexOf(".")); } /** * 依据原始文件名生成新文件名 * @return */ private String getName(String fileName) { Random random = new Random(); return this.fileName = "" + random.nextInt(10000) + System.currentTimeMillis() + this.getFileExt(fileName); } /** * 根据字符串创建本地目录 并按照日期建立子目录返回 * @param path * @return */ private String getFolder(String path) { SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd"); path += "/" + formater.format(new Date()); File dir = new File(this.getPhysicalPath(path)); if (!dir.exists()) { try { dir.mkdirs(); } catch (Exception e) { this.state = this.errorInfo.get("DIR"); return ""; } } return path; } /** * 根据传入的虚拟路径获取物理路径 * * @param path * @return */ private String getPhysicalPath(String path) { String servletPath = this.request.getServletPath(); String realPath = this.request.getSession().getServletContext() .getRealPath(servletPath); return new File(realPath).getParent() +"/" +path; } public void setSavePath(String savePath) { this.savePath = savePath; } public void setAllowFiles(String[] allowFiles) { this.allowFiles = allowFiles; } public void setMaxSize(int size) { this.maxSize = size; } public long getSize() { return this.size; } public String getUrl() { return this.url; } public String getFileName() { return this.fileName; } public String getState() { return this.state; } public String getTitle() { return this.title; } public String getType() { return this.type; } public String getOriginalName() { return this.originalName; } }
最近下载更多
lvhongquan LV11
2023年12月30日
wanglongfei2 LV2
2023年6月15日
liangge2115 LV27
2022年12月27日
最代码-宋家辉 LV61
2022年4月24日
wanglinddad LV54
2022年4月16日
我是helloworld LV23
2021年12月20日
哒哒你个嘻嘻 LV3
2021年12月18日
evagsd LV6
2021年12月3日
xxxdragon LV10
2021年9月10日
未来科技 LV3
2021年6月18日
最近浏览更多
lvhongquan LV11
2023年12月30日
13161895 LV1
2023年12月29日
black8angel LV4
2023年12月22日
shuangfu LV25
2023年12月2日
LITIANYU084414 LV11
2023年11月28日
wanglongfei2 LV2
2023年6月15日
n99999
2023年6月10日
暂无贡献等级
yunYUN123 LV1
2023年5月22日
张三12348613 LV3
2023年4月27日
pangzhihui LV12
2023年4月25日