一、介紹
spring内建的multipart支援網絡程式檔案上傳。我們可以通過配置MultipartResolver來啟動上傳支援。它定義在org.springframework.web.multipart包中。spring是通過使用Commons FileUpload插件來完成MultipartResolver的。
預設情況下,spring不處理multipar的form資訊,因為開發者預設會自己去處理這部分資訊,當然我們可以随時打開這個支援。這樣對于每一個請求,都會檢視它是否包含multipart的資訊,如果沒有則按流程繼續執行。如果發現有,就會交給已經被聲明的MultipartResolver進行處理,然後我們就能像處理其他普通屬性一樣處理檔案上傳了。
二、使用MultipartResolver
下面的例子顯示了如何使用CommonsMultipartResolver
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="100000"/>
</bean>
當然,我們要把所需的jar包放到lib中, 就是commons-fileupload.jar.
三、處理一個檔案上傳的form
當MultipartResolver處理完成以後,請求被處理成和普通請求一樣。下面是頁面檔案。
<html>
<head>
<title>Upload a file please</title>
</head>
<body>
<h1>Please upload a file</h1>
<form method="post" action="/form" enctype="multipart/form-data">
<input type="text" name="name"/>
<input type="file" name="file"/>
<input type="submit"/>
</form>
</body>
</html>
下一步是建立一個controller來處理檔案上傳。controller也和其他的一樣,除了在我們的方法參數中使用MultipartHttpServletRequest或者MultipartFile。
@Controller
public class FileUpoadController {
@RequestMapping(value = "/form", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
// store the bytes somewhere
return "redirect:uploadSuccess";
} else {
return "redirect:uploadFailure";
}
}
}
最後,我們要聲明我們的controller和multipar解析器
<beans>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
<!-- Declare explicitly, or use <context:annotation-config/> -->
<bean id="fileUploadController" class="examples.FileUploadController"/>
</beans>
--------------------------
如果你對java、swing、各種架構、javascript、css、linux、資料庫程式設計等知識很感興趣,或者正在從事這些工作,請加入我建的群:464696550