1. 程式人生 > >java spring mvc 上傳

java spring mvc 上傳

Spring mvc  實現上傳功能

spring mvc Controller 中的程式碼

@RequestMapping("/userAddGo")
	public ModelAndView userAddGo(HttpServletRequest request,
			@ModelAttribute("user") User user) throws IllegalStateException,
			IOException {
		ModelAndView mav = new ModelAndView("redirect:/user/userList");
		userService.insertUser(user);
		System.out.println("檔案上傳。。");
		// 建立一個通用的多部分解析器.
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
		// 設定編碼
		multipartResolver.setDefaultEncoding("utf-8");
		// 判斷 request 是否有檔案上傳,即多部分請求...
		if (multipartResolver.isMultipart(request)) {
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			Iterator<String> iter = multiRequest.getFileNames();
			while (iter.hasNext()) {
				MultipartFile file = multiRequest.getFile(iter.next());
				// 判斷檔案是否為空
				if (file.isEmpty()) {
					continue;
				}
				String path = request.getSession().getServletContext()
						.getRealPath("/");
				SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
				sdf.format(new Date());
				// 獲取檔案的名字
				String originalFilename = file.getOriginalFilename();
				String filepath = request.getSession().getServletContext()
						.getRealPath("/")
						+ "upload/" + file.getOriginalFilename();
				this.createParentDirectory(filepath);
				File uploadFile = new File(filepath);
				file.transferTo(uploadFile);
			}
		}
		return mav;

	}
private void createParentDirectory(String path) {
		Assert.notNull(path);
		File file = new File(path);
		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
			file.getParentFile().setWritable(true, false);
			file.getParentFile().setExecutable(true, false);
		}

	}

JSP中的程式碼
 <tr>
    <td>
      <input type="file" id="file" name="file">上傳</ipput>
    </td>
  </tr>
      
      <tr>
      <td>
         <input type="button" onclick="submit();" value="確認"/>
      </td>
      </tr>
      
 </table>

</form>
<script type="text/javascript">
   function submit(){
		   $('#ff').submit();
   }

</script>

form 標籤裡面必須有 

enctype="multipart/form-data" 
<form action="${pageContext.request.contextPath}/user/userAddGo" id="ff" enctype="multipart/form-data" method="post">


spring mvc 中配置引數
<!-- 配置檔案上傳,如果沒有使用檔案上傳可以不用配置,當然如果不配,那麼配置檔案中也不必引入上傳元件包 -->
	<bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <!-- 預設編碼 -->
        <property name="defaultEncoding" value="utf-8" />  
        <!-- 檔案大小最大值 -->
        <property name="maxUploadSize" value="10485760000" />  
        <!-- 記憶體中的最大值 -->
        <property name="maxInMemorySize" value="40960" />  
    </bean>