Spring MVC 處理表單中的文件上傳

2018-07-26 14:30 更新

當解析器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";
    }

}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號