SpringMVC 文件上传

   项目中常常须要进行文件上传处理,因此一个好用的文件上传工具必不可少,基于Maven的SpringMVC项目中的文件上传封装工具:java

<!-- 上传组件包 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.9</version>
		</dependency>
        <!-- 图片压缩 -->
        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>
package com.tool.image;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.tool.IsNull;


/**
 * <p>SpringMVC文件上传工具
 * <p>建立人:geYang
 * <p>建立时间:2017.8.1
 */

public class Uplode {

    /**
     *<p>方法说明: TODO 文件上传
     *<p>参数说明: HttpServletRequest request
     *<p>参数说明: String path   图片上传路径(例:"/fileLibrary/upload/productPicture/")
     *<p>参数说明: 注意: 1:上传文件的  input 标签名默认为  "files"; 
     *<p>           2:每次上传最多不能超过10个文件; 
     *<p>           3:单个文件最大不能超过300KB;S
     *<p>   例: input type="file" name="files" data-show-caption="true" multiple="multiple"
     *<p>返回说明:  List<String> listImage 上传后的文件名集合
     *<p>建立时间: 2017年10月24日 下午3:44:21
     *<p>创  建  人: geYang
     **/
    public static List<String> uploadFileList(HttpServletRequest request,String path){
	    return uploadFileList(request, path, "files");
	}
    public static List<String> uploadFileList( HttpServletRequest request, String path, String name){
        List<String> listImage = new ArrayList<String>();       //返回的图片名列表
        //建立一个通用的多部分解析器 
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        if (multipartResolver.isMultipart(request)) {
            // 转换成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            List<MultipartFile> list = multiRequest.getFiles(name);  // 取得request中的全部文件名
            if(list.size() > 10){
                System.out.println("单次上传不能超过10个文件");
                return null;
            }
            Iterator<MultipartFile> it = list.iterator();
            while(it.hasNext()){
                MultipartFile file = it.next();
                System.out.println("文件大小=="+file.getSize());
                if(file.getSize()>300*1024){
                    System.out.println("该文件大小超过300KB,不执行上传");
                    continue;
                }
                String imageName = null;
                try {
                    imageName = uploadFile(file,request,path);  //执行上传
                } catch (IllegalStateException | IOException e) {
                    e.printStackTrace();
                    System.out.println("文件上传异常");
                }
                if(!IsNull.isNull(imageName))
                    listImage.add(imageName);
            }
        }
        return listImage;
    }
	
	/**
	 * <p>方法说明:文件删除方法
	 * <p>参数说明:HttpServletRequest
	 * <p>参数说明:String fileName 将要删除的文件名
	 * <p>返回说明:成功 turn| 错误 false
	 * <p>建立人: geYang
	 * <p>建立时间:2017.8.2
	 * */
	public static boolean delete(HttpServletRequest req, String fileName){
		if(IsNull.isNull(fileName)){
			return false;
		}else{
			String realPath = req.getSession().getServletContext().getRealPath(fileName);
			File f = new File(realPath); // 输入要删除的文件位置
			if(f.exists() && !f.isDirectory()){
				f.delete();
				return true;
			}
			return false;
		}
	}

    /**
     * <p>方法说明:文件上传路径处理(图片不压缩)
     * <p>参数说明:MultipartFile file 上传的文件
     * <p>参数说明:String saveUrl     文件存放路径
     * <p>参数说明:HttpServletRequest 
     * <p>返回说明:String imgName     返回上传后文件名(包括路径)
     * @throws IOException 
     * @throws IllegalStateException 
     * */
    private static String uploadFile(MultipartFile file,HttpServletRequest request,String saveUrl) throws IllegalStateException, IOException{
        String originalName = file.getOriginalFilename();   //获取文件原先名称
        String suffix= originalName.substring(originalName.lastIndexOf("."));   //取到上传图片的后缀名
        String uuid = UUID.randomUUID()+suffix;     //随机生成图片名字
        //获取图片存入地址
        String realPath = request.getSession().getServletContext().getRealPath(saveUrl);
        File files = new File(realPath);    //判断该路径文件夹是否存在
        if(!files.exists()||!files.isDirectory()){
            files.mkdirs();  //建立文件夹
        }
        file.transferTo(new File(realPath+"/"+uuid));   //将图片存入以上地址
        return saveUrl+uuid;
    }

	

}
相关文章
相关标签/搜索