文件controller

stoneechogx 2016-03-28

https://github.com/hawkroc/SpringMVC-Hibernate-ehcache/blob/master/src/main/java/sy/controller/FileController.java

packagesy.controller;

importjava.io.File;

importjava.io.IOException;

importjava.text.SimpleDateFormat;

importjava.util.ArrayList;

importjava.util.Arrays;

importjava.util.Collections;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.Hashtable;

importjava.util.List;

importjava.util.Map;

importjava.util.UUID;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

importorg.apache.commons.fileupload.FileItem;

importorg.apache.commons.fileupload.FileItemFactory;

importorg.apache.commons.fileupload.FileUploadException;

importorg.apache.commons.fileupload.disk.DiskFileItemFactory;

importorg.apache.commons.fileupload.servlet.ServletFileUpload;

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.ResponseBody;

importsy.comparator.NameComparator;

importsy.comparator.SizeComparator;

importsy.comparator.TypeComparator;

importsy.util.ConfigUtil;

/**

*文件控制器

*

*@author孙宇

*

*/

@Controller

@RequestMapping("/fileController")

publicclassFileControllerextendsBaseController{

/**

*浏览器服务器附件

*

*@paramresponse

*@paramrequest

*@paramsession

*@return

*/

@RequestMapping("/fileManage")

@ResponseBody

publicMap<String,Object>fileManage(HttpServletResponseresponse,HttpServletRequestrequest,HttpSessionsession){

Map<String,Object>m=newHashMap<String,Object>();

//根目录路径,可以指定绝对路径,比如/var/www/attached/

StringrootPath=session.getServletContext().getRealPath("/")+"attached/";

//根目录URL,可以指定绝对路径,比如http://www.yoursite.com/attached/

StringrootUrl=request.getContextPath()+"/attached/";

//图片扩展名

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

StringdirName=request.getParameter("dir");

if(dirName!=null){

if(!Arrays.<String>asList(newString[]{"image","flash","media","file"}).contains(dirName)){

//out.println("InvalidDirectoryname.");

//return;

try{

response.getWriter().write("无效的目录名称!");

}catch(IOExceptione){

e.printStackTrace();

}

returnm;

}

rootPath+=dirName+"/";

rootUrl+=dirName+"/";

FilesaveDirFile=newFile(rootPath);

if(!saveDirFile.exists()){

saveDirFile.mkdirs();

}

}

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

Stringpath=request.getParameter("path")!=null?request.getParameter("path"):"";

StringcurrentPath=rootPath+path;

StringcurrentUrl=rootUrl+path;

StringcurrentDirPath=path;

StringmoveupDirPath="";

if(!"".equals(path)){

Stringstr=currentDirPath.substring(0,currentDirPath.length()-1);

moveupDirPath=str.lastIndexOf("/")>=0?str.substring(0,str.lastIndexOf("/")+1):"";

}

//排序形式,nameorsizeortype

Stringorder=request.getParameter("order")!=null?request.getParameter("order").toLowerCase():"name";

//不允许使用..移动到上一级目录

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

//out.println("Accessisnotallowed.");

//return;

try{

response.getWriter().write("不允许访问!");

}catch(IOExceptione){

e.printStackTrace();

}

returnm;

}

//最后一个字符不是/

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

//out.println("Parameterisnotvalid.");

//return;

try{

response.getWriter().write("参数无效!");

}catch(IOExceptione){

e.printStackTrace();

}

returnm;

}

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

FilecurrentPathFile=newFile(currentPath);

if(!currentPathFile.isDirectory()){

//out.println("Directorydoesnotexist.");

//return;

try{

response.getWriter().write("目录不存在!");

}catch(IOExceptione){

e.printStackTrace();

}

returnm;

}

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

List<Hashtable<String,Object>>fileList=newArrayList<Hashtable<String,Object>>();

if(currentPathFile.listFiles()!=null){

for(Filefile:currentPathFile.listFiles()){

Hashtable<String,Object>hash=newHashtable<String,Object>();

StringfileName=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","");

}elseif(file.isFile()){

StringfileExt=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.<String>asList(fileTypes).contains(fileExt));

hash.put("filetype",fileExt);

}

hash.put("filename",fileName);

hash.put("datetime",newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(file.lastModified()));

fileList.add(hash);

}

}

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

Collections.sort(fileList,newSizeComparator());

}elseif("type".equals(order)){

Collections.sort(fileList,newTypeComparator());

}else{

Collections.sort(fileList,newNameComparator());

}

m.put("moveup_dir_path",moveupDirPath);

m.put("current_dir_path",currentDirPath);

m.put("current_url",currentUrl);

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

m.put("file_list",fileList);

returnm;

}

/**

*

*@paramresponse

*@paramrequest

*@paramsession

*@return

*/

@RequestMapping("/upload")

@ResponseBody

publicMap<String,Object>upload(HttpServletResponseresponse,HttpServletRequestrequest,HttpSessionsession){

Map<String,Object>m=newHashMap<String,Object>();

m.put("error",1);

m.put("message","上传失败!");

//文件保存目录路径

StringsavePath=session.getServletContext().getRealPath("/")+"attached/";

//文件保存目录URL

StringsaveUrl=request.getContextPath()+"/attached/";

//定义允许上传的文件扩展名

HashMap<String,String>extMap=newHashMap<String,String>();

extMap.put("image",ConfigUtil.get("image"));

extMap.put("flash",ConfigUtil.get("flash"));

extMap.put("media",ConfigUtil.get("media"));

extMap.put("file",ConfigUtil.get("file"));

longmaxSize=Long.parseLong(ConfigUtil.get("maxFileSize"));//允许上传最大文件大小(字节)

if(!ServletFileUpload.isMultipartContent(request)){

m.put("error",1);

m.put("message","请选择文件!");

returnm;

}

//检查目录

FileuploadDir=newFile(savePath);

if(!uploadDir.isDirectory()){

uploadDir.mkdirs();

}

//检查目录写权限

if(!uploadDir.canWrite()){

m.put("error",1);

m.put("message","上传目录没有写权限!");

returnm;

}

StringdirName=request.getParameter("dir");

if(dirName==null){

dirname="image";

}

if(!extMap.containsKey(dirName)){

m.put("error",1);

m.put("message","目录名不正确!");

returnm;

}

//创建文件夹

savePath+=dirName+"/";

saveUrl+=dirName+"/";

FilesaveDirFile=newFile(savePath);

if(!saveDirFile.exists()){

saveDirFile.mkdirs();

}

SimpleDateFormatyearDf=newSimpleDateFormat("yyyy");

SimpleDateFormatmonthDf=newSimpleDateFormat("MM");

SimpleDateFormatdateDf=newSimpleDateFormat("dd");

Datedate=newDate();

Stringymd=yearDf.format(date)+"/"+monthDf.format(date)+"/"+dateDf.format(date)+"/";

savePath+=ymd;

saveUrl+=ymd;

FiledirFile=newFile(savePath);

if(!dirFile.exists()){

dirFile.mkdirs();

}

if(ServletFileUpload.isMultipartContent(request)){//判断表单是否存在enctype="multipart/form-data"

FileItemFactoryfactory=newDiskFileItemFactory();

ServletFileUploadupload=newServletFileUpload(factory);

upload.setHeaderEncoding("UTF-8");

try{

List<FileItem>items=upload.parseRequest(request);

for(FileItemitem:items){

StringfileName=item.getName();

if(!item.isFormField()){

//检查文件大小

if(item.getSize()>maxSize){

m.put("error",1);

m.put("message","上传文件大小超过限制!(允许最大["+maxSize+"]字节,您上传了["+item.getSize()+"]字节)");

returnm;

}

//检查扩展名

StringfileExt=fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();

if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){

m.put("error",1);

m.put("message","上传文件扩展名是不允许的扩展名。\n只允许"+extMap.get(dirName)+"格式!");

returnm;

}

StringnewFileName=UUID.randomUUID().toString()+"."+fileExt;

try{

FileuploadedFile=newFile(savePath,newFileName);

item.write(uploadedFile);

}catch(Exceptione){

m.put("error",1);

m.put("message","上传文件失败!");

returnm;

}

m.put("error",0);

m.put("url",saveUrl+newFileName);

}

}

}catch(FileUploadExceptione){

e.printStackTrace();

}

}

returnm;

}

}

StatusAPITrainingShopBlogAbout

©2016GitHub,Inc.TermsPrivacy

相关推荐