1. 程式人生 > >SSM實現檔案、圖片的批量上傳

SSM實現檔案、圖片的批量上傳

今天一個新來的同事要寫批量上傳圖片的介面,但是他沒做過檔案上傳,我就想到前端時間自己做過pdf檔案的上傳,碰巧我自己手頭上功能已經做完,他又毫無頭緒,就自己試了一下,在自己之前做的上傳pdf檔案上進行修改成批量上傳圖片,這個對批量上傳任何檔案都適用。

1.在springMVC.xml的配置檔案新增multipartResolver

	<!-- 檔案上傳 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
		<property name="maxUploadSize">
			<value>32505856</value><!-- 上傳檔案大小限制為31M,31*1024*1024 -->
		</property>
		<property name="maxInMemorySize">
			<value>4096</value>
		</property>
	</bean>

2.在Controller層寫上程式碼:

	// 批量上傳檔案
	@RequestMapping("/uploadPicture")
	public @ResponseBody ResultObject uploadPicture(@RequestParam MultipartFile[] files, HttpServletRequest request, int id)
			throws IOException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
		String res = sdf.format(new Date());
		ResultObject retObj = ResultObject.getFailResultObject();
		Map<String, Object> model = new HashMap<String, Object>(2);
		int flag = 0;
		String msg = "上傳失敗";
		// uploads資料夾位置
		String rootPath = request.getSession().getServletContext().getRealPath("WEB-INF/upload");
		// 建立年月資料夾
		Calendar date = Calendar.getInstance();
		File dateDirs = new File(date.get(Calendar.YEAR) + File.separator + (date.get(Calendar.MONTH) + 1));

		// 原始名稱
		for (int i = 0; i < files.length; i++) {
			MultipartFile file = files[i];

			// 獲取檔名
			String fileName = file.getOriginalFilename();
			System.out.println(fileName);

			File newFile = new File(rootPath + File.separator + dateDirs + File.separator + fileName);
			// 判斷目標檔案所在目錄是否存在
			if (!newFile.getParentFile().exists()) {
				// 如果目標檔案所在的目錄不存在,則建立父目錄
				newFile.getParentFile().mkdirs();
			}
			// 將記憶體中的資料寫入磁碟
			file.transferTo(newFile);
			// 完整的url
			String fileUrl = date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/" + fileName;
			System.out.println("fileUrl:" + fileUrl);
			msg = "上傳成功";
		}

		model.put("flag", flag);
		model.put("msg", msg);
		retObj.setData(model);
		return retObj;
	}

3.編寫一個html檔案測試:


<html>
<head>
<meta charset="UTF-8">
    <title>file upload</title>
</head>
<body>
<form action="http://localhost:8080/專案名/controller路徑/uploadPicture" method="post" enctype="multipart/form-data">
	<span>使用者名稱</span> <input type="text" name="name"/><br/>
	<span>文    件1</span> <input type="file" name="files"/><br/>
	<span>文    件2</span> <input type="file" name="files"/><br/>
	<span>文    件3</span> <input type="file" name="files"/><br/>
	<input type="submit" value="提交">
</form>
</body>
</html>