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;
    }

	

}
相關文章
相關標籤/搜索