SpringMVC_AJAX異步文件上傳

1、導入相關jar包

* commons-fileupload-1.3.3.jar

* commons-io-2.5.jar

2、在springmvc-config.xml配置文件中進行一下配置:

<!--spring配置支持文件上傳處理 MultipartResolver --> 
<bean id = "multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 設置上傳限制 -->
    <property name="maxUploadSize" value="10000000"></property>
    <property name="defaultEncoding" value="utf-8"></property>

</bean>

3、使用 @ResponseBody註解、@ResponseBody註解

示例代碼(上傳單個文件)

//文件上傳
@RequestMapping(value="/upload")
@ResponseBody
public Message uploadImg(HttpServletRequest request,@RequestParam("file") MultipartFile file) throws IllegalStateException, IOException{
    Message message = new Message();
    if(!file.isEmpty()){//判斷文件非空、寫入上傳路勁
    //獲取上傳路徑
    String path = request.getServletContext().getRealPath("/images/");
    System.out.println(path);
    //獲取上傳原始文件名
    String fileName = file.getOriginalFilename();
    System.out.println(fileName);
    //防止用戶上傳相同名稱的圖片
    String time = new Date().getTime()+"";
    fileName = time+"_"+fileName;
    File filePath = new File(path,fileName);//完整路徑
    System.out.println(filePath);
    //判斷路徑是否存在、如果不存在、創建
    if(!filePath.getParentFile().exists()){
        filePath.getParentFile().mkdirs();
    }
    //上傳圖片
    file.transferTo(filePath);
    //生成縮略圖
    String smallName = time+"_small_"+file.getOriginalFilename();
    File smallPath = new File(path, smallName);
    Thumbnails.of(filePath).scale(0.2).toFile(smallPath);
	 message.setCode(1);
	 message.setInfo(fileName);
	 return message;
    }else{
	 message.setCode(0);
	 message.setInfo("error");
	 return message;
    }		
}

上傳多個文件(只需要傳多個參數即可)

//多個文件上傳
@RequestMapping(value="/upload2")
@ResponseBody
public Message uploadImgs(HttpServletRequest request, @RequestParam(value="file",required=false) MultipartFile file,
    @RequestParam(value="file1",required=false) MultipartFile file1) throws Exception{
			
    Message message = new Message();
    if(file!=null && !file.isEmpty()){//判斷文件非空、寫入上傳路勁
        //獲取上傳路徑
	String path = request.getServletContext().getRealPath("/images/");
	//獲取上傳原始文件名
	String fileName = file.getOriginalFilename();
	//防止用戶上傳相同名稱的圖片
	fileName = new Date().getTime()+"_"+fileName;
	File filePath = new File(path,fileName);//完整路徑
	//判斷路徑是否存在、如果不存在、創建
	if(!filePath.getParentFile().exists()){
	    filePath.getParentFile().mkdirs();
	}
	//上傳圖片
	file.transferTo(filePath);
	    message.setCode(1);
	    message.setInfo(fileName);
	    return message;
    }
			
    if(file1!=null && !file1.isEmpty() ){//判斷文件非空、寫入上傳路勁
	//獲取上傳路徑
	String path = request.getServletContext().getRealPath("/images/");
	//獲取上傳原始文件名
	String fileName = file1.getOriginalFilename();
	//防止用戶上傳相同名稱的圖片
	fileName = new Date().getTime()+"_"+fileName;
	File filePath = new File(path,fileName);//完整路徑
	//判斷路徑是否存在、如果不存在、創建
	if(!filePath.getParentFile().exists()){
	    filePath.getParentFile().mkdirs();
	}
	//上傳圖片
	file1.transferTo(filePath);
	message.setCode(1);
	message.setInfo(fileName);
	return message;
    }
			
	message.setCode(0);
	message.setInfo("error");
	return message;
}
		
@RequestMapping(value="/login")
public ModelAndView islogin(User user,HttpSession session){
    if(user.getUname().equals("admin")&&user.getUpwd().equals("admin")){
        session.setAttribute("user", user);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        return mv;
    }else{
	ModelAndView mv = new ModelAndView();
	mv.setViewName("login");
	return mv;
    }	
}

4、前端需要使用ajaxfileupload.js(要配合Jeuery1.2以下版本使用)

示例代碼:

$('#file').change(function() {
    $.ajaxFileUpload({
    url : 'user/upload2',//用於文件上傳的服務器端請`求地址
    //type:'post',
    secureuri : false,//一般設置爲false
    fileElementId : 'file',//文件上傳空間的id屬性  <input type="file" id="file" name="file" />
    dataType : 'text',//返回值類型 test
    success : function(data, status) //服務器成功響應處理函數
        {
	console.log(data);
	alert(data.info);
	if (data != null && data != "") {
	    $("#file").attr("title", data.info);
	}
    },
    error : function(data, status, e)//服務器響應失敗處理函數
        {
	    alert(e);
        }
   });
});

5、導入thumbnailator可進行縮略圖上傳

示例代碼:

@RequestMapping(value="/upload")
@ResponseBody
public Message uploadImg(HttpServletRequest request,@RequestParam("file") MultipartFile file) throws IllegalStateException, IOException{
    Message message = new Message();
    if(!file.isEmpty()){//判斷文件非空、寫入上傳路勁
        //獲取上傳路徑
	String path = request.getServletContext().getRealPath("/images/");
	System.out.println(path);
	//獲取上傳原始文件名
	String fileName = file.getOriginalFilename();
	System.out.println(fileName);
	//防止用戶上傳相同名稱的圖片
	String time = new Date().getTime()+"";
        fileName = time+"_"+fileName;
	File filePath = new File(path,fileName);//完整路徑
	System.out.println(filePath);
	//判斷路徑是否存在、如果不存在、創建
	if(!filePath.getParentFile().exists()){
	    filePath.getParentFile().mkdirs();
	}
	//上傳圖片
	file.transferTo(filePath);
	//生成縮略圖
	String smallName = time+"_small_"+file.getOriginalFilename();
	File smallPath = new File(path, smallName);
	Thumbnails.of(filePath).scale(0.2).toFile(smallPath);
	    message.setCode(1);
	    message.setInfo(fileName);
	    return message;
	}else{
	    message.setCode(0);
	    message.setInfo("error");
	    return message;
	}		
}

發佈了75 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章