kindeditor 文件上传 java_KindEditor 上传文件

importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.Comparator;importjava.util.Date;importjava.util.HashMap;importjava.util.Hashtable;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Random;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.fileupload.FileItemFactory;importorg.apache.commons.fileupload.FileUploadException;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;importorg.codehaus.jackson.map.ObjectMapper;importorg.springframework.stereotype.Controller;importorg.springframework.util.FileCopyUtils;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.multipart.MultipartFile;importorg.springframework.web.multipart.MultipartHttpServletRequest;

@Controller

@RequestMapping("kindeditor")public classUploadController {private static final ObjectMapper objectMapper = newObjectMapper();

@RequestMapping(value= "/fileUpload", method =RequestMethod.POST)

@ResponseBodypublic Map fileUpload(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException,

FileUploadException {

ServletContext application=request.getSession().getServletContext();

String savePath= application.getRealPath("/") + "images/";//文件保存目录URL

String saveUrl = request.getContextPath() + "/images/";//定义允许上传的文件扩展名

HashMap extMap = new HashMap();

extMap.put("image", "gif,jpg,jpeg,png,bmp");

extMap.put("flash", "swf,flv");

extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mp4,mpg,asf,rm,rmvb");

extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");//最大文件大小

long maxSize = 1000000;

response.setContentType("text/html; charset=UTF-8");if (!ServletFileUpload.isMultipartContent(request)) {return getError("请选择文件。");

}//检查目录

File uploadDir = newFile(savePath);if (!uploadDir.isDirectory()) {return getError("上传目录不存在。");

}//检查目录写权限

if (!uploadDir.canWrite()) {return getError("上传目录没有写权限。");

}

String dirName= request.getParameter("dir");if (dirName == null) {

dirName= "image";

}if (!extMap.containsKey(dirName)) {return getError("目录名不正确。");

}//创建文件夹

savePath += dirName + "/";

saveUrl+= dirName + "/";

File saveDirFile= newFile(savePath);if (!saveDirFile.exists()) {

saveDirFile.mkdirs();

}

SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd");

String ymd= sdf.format(newDate());

savePath+= ymd + "/";

saveUrl+= ymd + "/";

File dirFile= newFile(savePath);if (!dirFile.exists()) {

dirFile.mkdirs();

}

FileItemFactory factory= newDiskFileItemFactory();

ServletFileUpload upload= newServletFileUpload(factory);

upload.setHeaderEncoding("UTF-8");

MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest) request;

Iterator item=multipartRequest.getFileNames();while(item.hasNext()) {

String fileName=(String) item.next();

MultipartFile file=multipartRequest.getFile(fileName);//检查文件大小

if (file.getSize() >maxSize) {return getError("上传文件大小超过限制。");

}//检查扩展名

String fileExt= file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1).toLowerCase();if (!Arrays. asList(extMap.get(dirName).split(",")).contains(fileExt)) {return getError("上传文件扩展名是不允许的扩展名。\n只允许"

+ extMap.get(dirName) + "格式。");

}

SimpleDateFormat df= new SimpleDateFormat("yyyyMMddHHmmss");

String newFileName= df.format(new Date()) + "_" + new Random().nextInt(1000) + "." +fileExt;try{

File uploadedFile= newFile(savePath, newFileName);

FileCopyUtils.copy(file.getInputStream(),newFileOutputStream(uploadedFile));

}catch(Exception e) {return getError("上传文件失败。");

}

Map msg = new HashMap();

msg.put("error", 0);

msg.put("url", saveUrl +newFileName);returnmsg;

}return null;

}private MapgetError(String message) {

Map msg = new HashMap();

msg.put("error", 1);

msg.put("message", message);returnmsg;

}

@RequestMapping(value= "/fileManager", method =RequestMethod.POST)public voidfileManager(HttpServletRequest request,

HttpServletResponse response)throwsServletException, IOException {

ServletContext application=request.getSession().getServletContext();

ServletOutputStream out=response.getOutputStream();//根目录路径,可以指定绝对路径,比如 /var/www/attached/

String rootPath = application.getRealPath("/") + "images/";//根目录URL,可以指定绝对路径,比如http://www.yoursite.com/attached/

String rootUrl = request.getContextPath() + "/images/";//图片扩展名

String[] fileTypes = new String[] { "gif", "jpg", "jpeg", "png", "bmp"};

String dirName= request.getParameter("dir");if (dirName != null) {if (!Arrays.asList(new String[] { "image", "flash", "media", "file"})

.contains(dirName)) {

out.println("Invalid Directory name.");return;

}

rootPath+= dirName + "/";

rootUrl+= dirName + "/";

File saveDirFile= newFile(rootPath);if (!saveDirFile.exists()) {

saveDirFile.mkdirs();

}

}//根据path参数,设置各路径和URL

String path = request.getParameter("path") != null ?request

.getParameter("path") : "";

String currentPath= rootPath +path;

String currentUrl= rootUrl +path;

String currentDirPath=path;

String moveupDirPath= "";if (!"".equals(path)) {

String str= currentDirPath.substring(0,

currentDirPath.length()- 1);

moveupDirPath= str.lastIndexOf("/") >= 0 ? str.substring(0,

str.lastIndexOf("/") + 1) : "";

}//排序形式,name or size or type

String order = request.getParameter("order") != null ?request

.getParameter("order").toLowerCase() : "name";//不允许使用..移动到上一级目录

if (path.indexOf("..") >= 0) {

out.println("Access is not allowed.");return;

}//最后一个字符不是/

if (!"".equals(path) && !path.endsWith("/")) {

out.println("Parameter is not valid.");return;

}//目录不存在或不是目录

File currentPathFile = newFile(currentPath);if (!currentPathFile.isDirectory()) {

out.println("Directory does not exist.");return;

}//遍历目录取的文件信息

List fileList = new ArrayList();if (currentPathFile.listFiles() != null) {for(File file : currentPathFile.listFiles()) {

Hashtable hash = new Hashtable();

String fileName=file.getName();if(file.isDirectory()) {

hash.put("is_dir", true);

hash.put("has_file", (file.listFiles() != null));

hash.put("filesize", 0L);

hash.put("is_photo", false);

hash.put("filetype", "");

}else if(file.isFile()) {

String fileExt=fileName.substring(

fileName.lastIndexOf(".") + 1).toLowerCase();

hash.put("is_dir", false);

hash.put("has_file", false);

hash.put("filesize", file.length());

hash.put("is_photo", Arrays.asList(fileTypes)

.contains(fileExt));

hash.put("filetype", fileExt);

}

hash.put("filename", fileName);

hash.put("datetime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file

.lastModified()));

fileList.add(hash);

}

}if ("size".equals(order)) {

Collections.sort(fileList,newSizeComparator());

}else if ("type".equals(order)) {

Collections.sort(fileList,newTypeComparator());

}else{

Collections.sort(fileList,newNameComparator());

}

Map msg = new HashMap();

msg.put("moveup_dir_path", moveupDirPath);

msg.put("current_dir_path", currentDirPath);

msg.put("current_url", currentUrl);

msg.put("total_count", fileList.size());

msg.put("file_list", fileList);

response.setContentType("application/json; charset=UTF-8");

String msgStr=objectMapper.writeValueAsString(msg);

out.println(msgStr);

}class NameComparator implementsComparator {public intcompare(Object a, Object b) {

Hashtable hashA=(Hashtable) a;

Hashtable hashB=(Hashtable) b;if (((Boolean) hashA.get("is_dir"))&& !((Boolean) hashB.get("is_dir"))) {return -1;

}else if (!((Boolean) hashA.get("is_dir"))&& ((Boolean) hashB.get("is_dir"))) {return 1;

}else{return ((String) hashA.get("filename"))

.compareTo((String) hashB.get("filename"));

}

}

}class SizeComparator implementsComparator {public intcompare(Object a, Object b) {

Hashtable hashA=(Hashtable) a;

Hashtable hashB=(Hashtable) b;if (((Boolean) hashA.get("is_dir"))&& !((Boolean) hashB.get("is_dir"))) {return -1;

}else if (!((Boolean) hashA.get("is_dir"))&& ((Boolean) hashB.get("is_dir"))) {return 1;

}else{if (((Long) hashA.get("filesize")) >((Long) hashB

.get("filesize"))) {return 1;

}else if (((Long) hashA.get("filesize"))

.get("filesize"))) {return -1;

}else{return 0;

}

}

}

}class TypeComparator implementsComparator {public intcompare(Object a, Object b) {

Hashtable hashA=(Hashtable) a;

Hashtable hashB=(Hashtable) b;if (((Boolean) hashA.get("is_dir"))&& !((Boolean) hashB.get("is_dir"))) {return -1;

}else if (!((Boolean) hashA.get("is_dir"))&& ((Boolean) hashB.get("is_dir"))) {return 1;

}else{return ((String) hashA.get("filetype"))

.compareTo((String) hashB.get("filetype"));

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值