W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當解析器MultipartResolver
完成處理時,請求便會像其他請求一樣被正常流程處理。首先,創(chuàng)建一個接受文件上傳的表單將允許用于直接上傳整個表單。編碼屬性(enctype="multipart/form-data"
)能讓瀏覽器知道如何對多路上傳請求的表單進行編碼(encode)。
<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>
下一步是創(chuàng)建一個能處理文件上傳的控制器。這里需要的控制器與一般注解了@Controller
的控制器基本一樣,除了它接受的方法參數(shù)類型是MultipartHttpServletRequest
,或MultipartFile
。
@Controller
public class FileUploadController {
@RequestMapping(path = "/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";
}
return "redirect:uploadFailure";
}
}
請留意@RequestParam
注解是如何將方法參數(shù)對應到表單中的定義的輸入字段的。在上面的例子中,我們拿到了byte[]
文件數(shù)據(jù),只是沒對它做任何事。在實際應用中,你可能會將它保存到數(shù)據(jù)庫、存儲在文件系統(tǒng)上,或做其他的處理。
當使用Servlet 3.0的多路傳輸轉換時,你也可以使用javax.servlet.http.Part
作為方法參數(shù):
@Controller
public class FileUploadController {
@RequestMapping(path = "/form", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") Part file) {
InputStream inputStream = file.getInputStream();
// store bytes from uploaded file somewhere
return "redirect:uploadSuccess";
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: