学习笔记-SpringMVC(四)

SpringMVC详细教程
SPRING MVC 上传文件

  1. 配置web.xml允许访问*.jpg

    <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <!-- 表示允许访问*.jpg。 -->

    为什么要加这一段呢? 因为配置springmvc的servlet的时候,使用的路径是”/”,导致静态资源在默认情况下不能访问,所以要加上这一段,允许访问jpg。 并且必须加在springmvc的servlet之前
    如果你配置spring-mvc使用的路径是/*.do,就不会有这个问题了。

  2. 配置springmvc-servlet.xml

    <bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    <!-- 开放对上传功能的支持代码比较 复制代码 -->
  3. upload.jsp 上传页面

    <form action="uploadImage" method="post" enctype="multipart/form-data">
        选择图片:<input type="file" name="image" accept="image/*"><br>
        <input type="submit" value="上传">
    </form>

    上传页面,需要注意的是form 的两个属性必须提供method=”post” 和 enctype=”multipart/form-data” 缺一不可
    enctype属性:
    application/x-www-form-urlencoded在发送前编码所有字符(默认)(空格被编码为 ‘+’,特殊字符被编码为ASCII十六进制字符)
    multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
    text/plain 空格转换为“+”加号,但不对特殊字符编码。
    上传组件 增加一个属性 accept=”image/*” 表示只能选择图片进行上传

  4. 准备UploadedImageFile

    封装MultipartFile类型的字段 image ,用于接受页面的注入

        public class UploadedImageFile {
        MultipartFile image;
        public MultipartFile getImage() {
        return image;
        }
        public void setImage(MultipartFile image) {
            this.image = image;
        }
    }
    
  5. UploadController 上传控制器
    准备方法upload 映射上传路径/uploadImage

        @Controller
    public class UploadController {
            @RequestMapping("/uploadImage")
        public ModelAndView upload(HttpServletRequest request, UploadedImageFile file)
                throws IllegalStateException, IOException {
            // 参数UploadedImageFile 中已经注入好了 image
            String name = RandomStringUtils.randomAlphanumeric(10);
            // 通过 RandomStringUtils.randomAlphanumeric(10);获取一个随机文件名。
            // 因为用户可能上传相同文件名的文件,为了不覆盖原来的文件,通过随机文件名的办法来规避
            String newFileName = name + ".jpg";
            File newFile = new File(request.getServletContext().getRealPath("/image"), newFileName);
            // 根据request.getServletContext().getRealPath 获取到web目录下的image目录,用于存放上传后的文件。
            newFile.getParentFile().mkdirs();
            file.getImage().transferTo(newFile);
            // 调用file.getImage().transferTo(newFile); 复制文件
    
            ModelAndView mav = new ModelAndView("showUploadedFile");
            mav.addObject("imageName", newFileName);
            // 把生成的随机文件名提交给视图,用于后续的显示
        return mav;
        }
    
    }
  6. showUploadedFile.jsp 显示图片的页面

    <img src="image/${imageName}"/>
  7. 测试。

猜你喜欢

转载自blog.csdn.net/qq_36653267/article/details/79372831