上传文件+读取文件+更新信息

摘要:页面上传txt文档,读取文档中的内容,查数据库中现有的信息(次新),更新到最新的数据中。

1 页面按钮

<button type="button" class="btn btn-xs btn-danger"  onclick="clickFiles()" 
		id="uploadFiles" style="width:100px;height:30px;font-size:15px">上传文件</button>
<div class="form-group" style="display: none;">
        <input type="file" name="file" id="file" class="form-control" multiple="multiple" accept=".txt" onchange="uploadSpecFiles()">
</div>

按钮button需要绑定一个点击事件----οnclick= “clickFiles()” ,同时还需要一个input绑定一个改变事件----οnchange=“uploadSpecFiles()”

function clickFiles() {
    $("#file").click();
}
function uploadSpecFiles() {
    var formData = new FormData();
    for (var i = 0; i < $("#file")[0].files.length; i++) { /*循环获取上传的文件*/
        formData.append("file", $("#file")[0].files[i]);
    }
    var le = $("#file")[0].files.length;
    if (le == 0) {
        layer.alert("请选择文件!");
        return;
    } else if (le > 1) {
        layer.alert("只能选择一个文件上传!");
        $("#file").val("");
        return;
    } else {
        //获取文件名最后一个.的位置
        var index= $("#file")[0].files[0].name.lastIndexOf(".");
        //获取文件名后缀
        var ext = $("#file")[0].files[0].name.substr(index+1);
        if(!isAssetType(ext)){
            layer.alert("请上传正确的格式!");
            $("#file").val("");
            return;
        }
        //上传方法
        $.ajax({
            cache: true,
            url: getUrlCutJsessionId(ctx, "XXX/XXX"),  //所需要的列表接口地址
            data: formData,
            dataType: "json",
            type: "post",
            contentType: false,
            processData: false,
            error: function (request) {
                layer.msg("Connection error");
                formData = new FormData();
                $("#file").val("");
            },
            success: function (r) {
                if (r.success) {
                    if(r.data == '0'){
                        layer.open($.extend({
                            content: '<div><div class="layui-layer-content">上传失败</div></div>',
                            yes: undefined
                        }, false ? {} : undefined));
                    }else {
                       console.log(r.data);//返回的是一个map集合
                        layer.alert("上传成功,共上传"+r.data['XXX']+"条记录,继承信息成功"+r.data['XXX']+"条记录!");
                    }
                    $("#file").val("");
                    formData = new FormData();
                } else {
                    $("#file").val("");
                    layer.alert(r.msg);
                    formData = new FormData();
                }
            }
        });
    }
}
//判断后缀是否合规
function isAssetType(suffix) {
    return ['txt'].
    indexOf(suffix.toLowerCase()) !== -1;
}

2 读取文件

1>在读取文件时,用到了MultipartFile工具类

用工具类中的file.getOriginalFilename()得到文件名称,判断文件名称中是否包含特殊字符

String filename = file.getOriginalFilename();
if(!CheckUtil.checkUploadFileName(filename)){
	rr.setSuccess(false);
	rr.setMsg("文件名中不能包含特殊字符。");
    return rr;
}

//判断文件后缀是否符合要求

String suffix = filename.substring(filename.lastIndexOf(".") + 1);
if(!"txt".equals(suffix)){
    rr.setMsg("导入文件必须为txt文件");
    rr.setSuccess(false);
    return rr;
}
2>
Map<String, Object> params = new HashMap<>();
List<SeriousIllnessPolicy> hrList = new ArrayList<>();
try {
            //创建转换流对象     参数是字节输入流对象
            InputStreamReader reader=new InputStreamReader(file.getInputStream());
            //转换输入流
            BufferedReader br = new BufferedReader(reader);
            String line="";//定义字符串  保存行数据
            while (line !=null) {
                SeriousIllnessPolicy serious = new SeriousIllnessPolicy();
                //读取行数据
                line = br.readLine();
                if(line !=null && !"".equals(line)){//如果行为空,则跳过
                    serious.setEccPersonNo(line);
                    hrList.add(serious);//添加到集合中
                }
            }
            /*判断导入模板有无数据*/
            if (hrList.size() < 1) {
                result.setMsg("导入数据为空");
                result.setSuccess(false);
                return result;
            }
            params.put("hrList",hrList);
        } catch (IOException e) {
            e.printStackTrace();
        }

3 更新信息

 List<SeriousIllnessPolicy> hrList = (List<SeriousIllnessPolicy>) params.get("hrList");
ObjectMapper mapper = new ObjectMapper();
List<SeriousIllnessPolicy> list = mapper.convertValue(hrList, new TypeReference<List<SeriousIllnessPolicy>>() {});
……
//根据得到的list,遍历,查数据库,然后更新信息
        

获取参数时,可能出现的错误类型转换异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX
更新数据量大时,建议用jdbc的写法进行批量更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值