深挖SpringMVC_06_SpringMVC文件上傳

SpringMVC提供了文件上傳的功能,使用起來也很方便。

1. 添加Maven相關依賴

SpringMVC文件上傳需要在pom.xml裏添加如下兩個依賴,版本沒關係,別太老就行。

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

2. SpringMVC配置文件添加文件上傳配置

    <!-- 支持上傳文件 -->  
    <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>  

3. JSP上傳代碼

這裏以上傳圖片爲例,至於文件格式校驗,可以用功能豐富的前臺組件,當然也可以寫JS驗證,隨意,這塊就不說了,不是本文的重點,簡單提一下。

<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

    <form action="<%=path%>/fileUpload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" /> 
        <input type="submit" value="Submit" />
    </form>

4. Controller上傳文件處理代碼和圖片讀取代碼

@RequestMapping(value = "/fileUpload")
    public String upload(@RequestParam(value = "file", required = true) CommonsMultipartFile file,
            HttpServletRequest request, ModelMap model) {

        String path = "G:/upload";  
        String fileName = file.getOriginalFilename();  
        File targetFile = new File(path, fileName);  
        if(!targetFile.exists()){  
            targetFile.mkdirs();  
        }  

        //保存  
        try {  
            file.transferTo(targetFile);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        model.addAttribute("fileUrl", fileName); 
        return "result";
    }

    @RequestMapping(value = "/readimage")
    public void readFile(HttpServletResponse response) throws IOException {

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String fileName = request.getParameter("imagepath");

        fileName = "G:/upload/" + fileName;
        File file = new File(fileName);

        if(file.exists()) {

            FileInputStream inputStream = new FileInputStream(file);
            byte[] data = new byte[(int)file.length()];
            inputStream.read(data);
            inputStream.close();

            response.setContentType("text/html;charset=UTF-8");
            request.setCharacterEncoding("UTF-8");
            response.reset();
            response.setContentType("application/octet-stream; charset=utf-8");
            response.setContentType("image/png");

            OutputStream stream = response.getOutputStream();
            stream.write(data);
            stream.flush();
            stream.close();
        }
    }

5. 上傳成功頁面

<body>
    <img alt="" width="100" height="100" src="<%=path%>/readimage?imagepath=${fileUrl }" />
</body>


示例代碼下載:點我

發佈了56 篇原創文章 · 獲贊 31 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章