• ssm利用ajax上传图片和参数


    • 技术选型:
    • bootstrap-fileinput 渲染上传框
    • FormData 用于传递参数
    • bootstrap 前端渲染

    技术需求

    用于后台CMS更新商品的时候,需要上传图片和参数。但是为了节省流量,这里的图片是选择性上传,也就是说,后台分辨不出来,你到底有没有上传图片。

    • 功能截图:
      前端功能截图

    具体实现

    前端代码部分

    
    <%--编辑的模态框--%>
    <div class="modal fade" id="editContent" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header text-center">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title">商品信息修改</h4>
                </div>
                <div class="modal-body">
                    <form class="form-horizontal" id="editContentForm">
                        <div class="form-group">
                            <label class="col-sm-2 control-label">编号</label>
                            <div class="col-sm-10">
                                <input type="text" class="form-control" name="id"  id="contentId_update" disabled="disabled"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">内容标题</label>
                            <div class="col-sm-10">
                                <input type="text" name="title" class="form-control" id="contentTitle_update">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">子标题</label>
                            <div class="col-sm-10">
                                <input type="text" name="subTitle" class="form-control" id="contentSubTitle_update">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">标题描述</label>
                            <div class="col-sm-10">
                                <input type="text" name="titleDesc" class="form-control" id="contentTitleDesc_update">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">链接</label>
                            <div class="col-sm-10">
                                <input type="text" name="url" class="form-control" id="contentUrl_update">
                            </div>
                        </div>
                        <div class="form-group hidden" >
                            <label class="col-sm-2 control-label">所属分类</label>
                            <div class="col-sm-10">
                                <input type="text" name="categoryId" class="form-control" id="contentCategoryId_update" disabled="disabled">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">图片</label>
                            <div class="col-sm-10">
                                <input type="file" name="picFile" id="contentPic_update" />
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">图片2</label>
                            <div class="col-sm-10">
                                <input type="file" name="pic2File" id="contentPic2_update"/>
                            </div>
                            </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">内容</label>
                            <div class="col-sm-10">
                                <input type="text" name="content" class="form-control" id="contentContent_update">
                            </div>
                        </div>
                    </form>
                </div>
                <div class="modal-footer">
                    <div class="col-sm-12">
                        <button type="button" class="btn btn-default col-sm-5" data-dismiss="modal">关闭</button>
                        <button type="button" class="btn btn-primary pull-right col-sm-5" onclick= "emp_update_btn()">更新</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script>
    //ajax异步上传
    function emp_update_btn () {
            //没有检验数据是否正确 请注意
    
            var formdata = new FormData($("#editContentForm")[0]);
            formdata.append("id",$("#contentId_update").val());
    
    
            $.ajax({
              url:'${pageContext.request.contextPath}/content/updateContent.do',
                type:'post',
                dataType:'json',
                contentType: false,
                processData: false,
                data:formdata,
                success:function (result) {
                    if(result.result === "success"){
                        swal("成功","成功更新数据!","success");
                        listAll();
                        $("#editContent").modal("hide");
                    }
                }
    
            });
    </script>
    
    
    • 需要注意的是 这里和通常的ajax不一样,他传输的不是一般的JSON对象,而是FormData对象,他的写法也和平常的写法不一样
    • ajax注意点
    • 关于那个图片到底有没有上传的功能,前端不需要考虑

    后台代码部分

    
        @Value("${FILE_URL}")
        private  String FILE_URL;
    
        /**
         * function:更新商品
         * @param tbContent
         * @param pic
         * @param pic2
         * @return
         */
        @RequestMapping(value = "/updateContent.do")
        @ResponseBody
        public Map<String,String> updateContent(TbContent tbContent, @RequestParam(value = "picFile",required = false)MultipartFile pic, @RequestParam(value = "pic2File",required = false)MultipartFile pic2) throws IOException {
    
            HashMap<String,String> map = new HashMap<>();
    
            System.out.println(pic + ":"+FILE_URL);
    
            String picFileID = new String();
            String pic2FileID =new String();
            if(!pic.isEmpty()){
                 picFileID = FastDFSClient.uploadFile(pic.getInputStream(),pic.getOriginalFilename());
                if(picFileID == null){
                    map.put("result","failed");
                    return map;
                }
                tbContent.setPic(FILE_URL+picFileID);
                System.out.println(tbContent.getPic());
            }
    
            if(!pic2.isEmpty()){
                pic2FileID = FastDFSClient.uploadFile(pic2.getInputStream(),pic2.getOriginalFilename());
                if(pic2FileID == null){
                    map.put("result","failed");
                    return map;
                }
                tbContent.setPic2(pic2FileID);
            }
    
            try {
                contentService.updateContent(tbContent);
            } catch (IOException e) {
                e.printStackTrace();
                map.put("result","failed");
                return map;
            }
            map.put("result","success");
            return map;
        }
    }
    
    

    之前我用TbContent实体类去接收前端参数的时候,会加上@RequestBody,但是会报出400/415错误,因为FormData的编码并不是application/json;charset = utf-8 ,需要把这个注解删除。

  • 相关阅读:
    Vue项目搭建及原理三
    Vue项目搭建及原理一
    JS Cookie丢失问题
    1027 Colors in Mars
    1028 List Sorting
    1029 Median
    1030 Travel Plan
    1031 Hello World for U
    1032 Sharing
    1033 To Fill or Not to Fill
  • 原文地址:https://www.cnblogs.com/adroitwolf/p/14310266.html
Copyright © 2020-2023  润新知