jquery-ajax+springMVC实现文件上传

7 篇文章 0 订阅
6 篇文章 0 订阅

很多前端模块都需要文件上传,和ajax结合起来可以获得很好的用户体验,
这里分享一个springMVC的小案例,业务上考虑到了,ajax可以不断上传文件,这里并没禁止多次上传,但每次上传成功服务器端会删除掉旧文件,减少冗余文件的存在。

首先jsp页面文件—— 引入jquery

<script src="${pageContext.servletContext.contextPath}/Scripts/jquery-3.1.0.js" language="javascript" type="text/javascript"></script>

表单部分——偷懒下样式表写在属性里了
图片如果没有东西,显示默认图片,这里使用EL的concat方法,user是用户实体类,pic是头像属性

<fieldset style="position: absolute; left: 50%; width: 630px; border: 1px solid black; box-shadow: 3px 3px 6px black; margin-left: -315px">
<legend style="font: 700 18px/21px 微软雅黑; letter-spacing: 3px">用户编辑</legend> 
<!-- 图片如果没有东西,显示默认图片,这里使用EL的concat方法,user是用户实体类,pic是头像属性 -->
<img src="${user.pic==null?"/upload/noPic.png":"/upload/testSpringMVC/".concat(user.pic)}" style="box-shadow: 1px 1px 3px gray; display: block; width: 256px; max-height: 256px" /></div>
<input type="file" name="uploadFile" accept="image/*"  multiple="multiple" /> 
</fieldset>

页面的js代码,使用jquery的ajax,这里需要创建form表单对象(H5支持方可,不支持就只要弄整个表单提交了)

var fn="";//全局变量,存放重复上传时的上次成功文件名,重新上传从服务器删除掉原来上传的文件
$("input[name='uploadFile']").change(function(e){
        var data=new FormData();//创建表单对象
        //表单对象封装数据,当前选择器元素集合的第一个,选中的第一个文件(PS文件组件支持多选,服务端按文件数组处理,这里我们只处理单文件)
        data.append("file",$(this)[0].files[0]);
        //如果是重复上传头像,将上次成功上传的文件名一并传回,服务端可以删除旧文件,当然还有别的技术可以处理,但业务流程相同
        data.append("fname",fn);        $.ajax({
                type:"post",                url:"${pageContext.servletContext.contextPath}/tools/uploadFile.action",
            data:data,
            processData:false,
            contentType:false,
            success:function(data){             
                if(data.saveFile!=null){
                //saveFile是springMVC回传的json数据保存的文件名,同时保存的全局变量fn
                fn=data.saveFile;
                //改变页面图片显示,偷懒样式表写一起了
                $("#imageFile").html(
    "<img src='/upload/testSpringMVC/"+fn+"' style='box-shadow: 1px 1px 3px gray; display: block; width: 256px; max-height: 256px' />"  );}
            }
        });
    });

springMVC配置文件,增加分段解析器,这里只简单做了下上传文件大小10MB

<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
    <property name="maxUploadSize">
        <value>10485760</value>
    </property>
</bean>

controller部分代码,VO是自定义的 view object对象,封装了下回应信息,很简单就不贴出来了,

springMVC的json插件支持
jackson-annotations-2.4.0.jar
jackson-core-2.4.2.jar
jackson-databind-2.4.2.jar
@ResponseBody注解会自动将返回对象封装成json串,非常方便

@RequestMapping("uploadFile")
@ResponseBody
public ResponseVo uploadFile(MultipartFile file,String fname){
        //获得原始文件名
        String oldName = file.getOriginalFilename();
        ResponseVo vo = new ResponseVo();
        //获得文件扩展名,并用UUID生成不重复的新文件名
        String newName=UUID.randomUUID()+oldName.substring(oldName.lastIndexOf("."));
        try {
        //保存新文件
            file.transferTo(new File("D:\\upload\\testSpringMVC", newName));
            //封装回传json数据
            vo.setSaveFile(newName);
            vo.setMessage("上传文件成功");
            //如果存在上次上传的文件,进行删除
            if(fname!=null && !fname.equals("")){
                File delFile = new File("D:\\upload\\testSpringMVC",fname);
                if(delFile.exists()){
                    delFile.delete();
                }
            }
            return vo;
            } catch (IllegalStateException | IOException e) {   
            e.printStackTrace();
            vo.setMessage("上传文件失败");
            return vo;
        }
    }

完结,小小业务处理可以带给用户更好的使用体验,对于业务处理的小细节,你是不是也考虑到了呢?

Created by 薛萌
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值