欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC上传图片并预览

程序员文章站 2022-07-15 11:42:43
...

1.HTML代码

<form id="logoform" enctype="multipart/form-data">
 <img src="../media/images/upload.png" style="width:150px;height:150px;" id="showimg"/>
 <input type="file" name="file" id="image_input"/>
</form>

2.JS代码

需要引入jquery.form.js插件,使用ajaxSubmit

<script src="${pageContext.request.contextPath}/media/jquery/jquery-1.10.2.min.js"></script>
<script src="${pageContext.request.contextPath}/media/jquery/jquery.form.js"></script>
$(function(){
    $("#image_input").change(function(){
        var imagePath = $("#image_input").val();
        if (imagePath == '') {
            return false;
        }
        var strExtension = imagePath.substr(imagePath.lastIndexOf('.') + 1);
        if (strExtension != 'jpg' && strExtension != 'gif' && strExtension != 'png' && strExtension != 'bmp') {
            alert("请选择图片");
            return false;
        }
        $("#logoform").ajaxSubmit({
            type : 'POST',
            url : 'uploadimage',
            success : function(data) {
                $("#showimg").attr("src", data);
            },
            error : function() {
                alert("上传失败,请检查网络后重试");
            }
        });
    })
})

3.后台代码

    /**
     * 上传图片
     * 
     * required = false 时,可以不传这个参数,true(默认)时必须传
     */
    @RequestMapping(value = "/uploadimage", produces = "text/html;charset=UTF-8")
    @ResponseBody
    public String uploadImage(HttpServletRequest request, 
        HttpServletResponse response, HttpSession session, 
        @RequestParam(value = "file", required = true) MultipartFile file) 
        throws IllegalStateException, IOException {

        String path = session.getServletContext().getRealPath("/media/temporaryupload");

        // fileName唯一性
        int a = ThreadLocalRandom.current().nextInt(100000, 999999);
        String fileName = "" + a + System.currentTimeMillis() + file.getOriginalFilename();

        File targetFile = new File(path, fileName);

        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        /**
         * MultipartFile接口中定义了如下很多有用的方法。
              使用getSize()方法获得文件长度,以此决定允许上传的文件大小。
              使用isEmpty()方法判断上传文件是否为空文件,以此决定是否拒绝空文件。
              使用getInputStream()方法将文件读取为java.io.InputStream流对象。
              使用getContentType()方法获得文件类型,以此决定允许上传的文件类型。
              使用transferTo(dest)方法将上传文件写到服务器上指定的文件
         */
        file.transferTo(targetFile);
        String fileUrl = request.getContextPath() + "/media/temporaryupload/" + fileName;
        return fileUrl;
    }

4.SpringMVC xml配置文件

<!-- 配置文件上传 MultipartResolver ,文件处理器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="5000000"></property><!-- 5M -->
    <property name="defaultEncoding" value="utf-8"/>

</bean>

当配置了这个处理器后,spring会对用户请求进行拦截,判断是否为附件上传类型,既enctype=”multipart/form-data”,如果是,则会对请求流进行处理,将其转换为DefaultMultipartHttpServletRequest对象,该对象封装了附件内容