springboot 实现图片上传,包含其他元素

数据库字段:
tb_goodsdetial:
在这里插入图片描述
在这里插入图片描述

Controller:

//商家增加商品--》待审核状态、待上架
@PostMapping("/goodsAdd")
@ResponseBody
public JsonResult insertGood(TbGoodsdetail goodsDetail, MultipartFile gPicture1,String goodsTypeName,HttpSession session) throws FileNotFoundException {
    JsonResult result = goodsDetailService.insertGood(goodsDetail, gPicture1,goodsTypeName,session);
    return result;
}

Mapper:

 //商家新增货物
    Integer insertGood(TbGoodsdetail tbGoodsdetail);
<!--商家新增货物-->
<insert id="insertGood" parameterType="TbGoodsdetail">
    insert into tb_goodsdetail(goodsId,gName,gNowPrice,gOldPrice,gSizeMsg
                ,gPicture,number,uid,goodsTypeId,gscore,isPass,isHot,state)
    values(null,#{gName},#{gNowPrice},0,#{gSizeMsg},#{gPicture},
            #{number},#{uid},#{goodsTypeId},0,2,0,2)
</insert>

Service:

//商家新增商品
    JsonResult insertGood(TbGoodsdetail tbGoodsdetail,MultipartFile gPicture, String goodsTypeName,HttpSession session) throws FileNotFoundException;

ServiceImpl:


//商家新增商品
    @Override
    public JsonResult insertGood(TbGoodsdetail goodsDetail, MultipartFile gPicture,String goodsTypeName,HttpSession session) throws FileNotFoundException {
        if(gPicture==null){
            return new JsonResult(201,"请上传图片!");
        }
        //获取文件的大小
        if(gPicture.getSize()>1024*1024*50){
            return new JsonResult(202,"请上传小于50MB的图片");
        }
        //获取上传的文件名
        String filename = gPicture.getOriginalFilename();
        //获取文件后缀
        int index = filename.lastIndexOf(".");
        String sub = filename.substring(index + 1, filename.length());
        if(!sub.equals("jpg")&&!sub.equals("png")&&!sub.equals("bmp")){
            return new JsonResult(203,"请上传jpg或png或bmp类型文件!");
        }
        String suffix = filename.substring(index);
        //文件名不能重复,故用当前系统时间毫秒值+文件名来区分
        long time = System.currentTimeMillis();
        String newFileName = time +suffix;//long类型+字符串类型自动变为字符串类型
        //要上传的位置
        String staticPath = ResourceUtils.getURL("classpath:static").getPath().replace('/', '\\');
        System.out.println(staticPath);
        String path=staticPath+"\\"+"upload";
        System.out.println(path);
        File file1=new File(path);
        if (!file1.exists()){
            file1.mkdirs();
        }
        String filePath = path+File.separator+newFileName;
        System.out.println("filePath------"+filePath);
        //判断目录下的文件是否存在,使用file对象来描述文件路径
        File file2 = new File(filePath);
        //上传文件
        try {
            gPicture.transferTo(file2);
            Integer uid = 2;//(Integer) session.getAttribute("uid");
            if(uid==null){
                return new JsonResult(206,"会话失效,请重新登录!");
            }
            goodsDetail.setUid(uid);

        } catch (IOException e) {
            e.printStackTrace();
            return new JsonResult(204,"头像上传失败!");
        }

        goodsDetail.setGPicture(newFileName);
        Integer goodsTypeId = goodsDetailMapper.findTypeIdByName(goodsTypeName);
        goodsDetail.setGoodsTypeId(goodsTypeId);
        Integer integer = goodsDetailMapper.insertGood(goodsDetail);
        if(integer!=1){
            return new JsonResult(205,"新增失败!");
        }
        return  new JsonResult(200,"新增成功,等待审核!");
    }

Html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

                        <head>
                            <base th:href="@{/}">
                            <meta charset="utf-8">
                            <title>
                                修改商品信息
                            </title>
                            <meta name="renderer" content="webkit">
                            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
                            <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
                            <meta name="apple-mobile-web-app-status-bar-style" content="black">
                            <meta name="apple-mobile-web-app-capable" content="yes">
                            <meta name="format-detection" content="telephone=no">

                            <link rel="stylesheet" href="./css/font.css">
                            <link rel="stylesheet" href="./css/index.css">
                            <script src="./lib/layui/layui.js" charset="utf-8"></script>
                            <script type="text/javascript" src="./js/index.js"></script>
                            <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script>

                        </head>
                        <body>

                        <div class="layui-card">
                            <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">

                                <div class="layui-tab-content" >
                                    <div class="layui-tab-item layui-show"  >
                                        <form class="layui-form layui-form-pane">  <!--th:action="@{/goodUpdate}-->
                                            <div class="layui-form-item">
                                                <label class="layui-form-label">
                                                    <span class='x-red'>*</span>商品名称
                                                </label>
                                                <div class="layui-input-block">
                                                    <!--readonly="readonly"只读,不可修改-->
                                                    <input type="text"  th:value="${good.getGName()}" th:name="gName" th:id="gName" autocomplete="off" placeholder="请输入商品规格"
                                                           class="layui-input" lay-verify="required">
                                                </div>
                                            </div>
                                            <div class="layui-form-item">
                                                <label class="layui-form-label">
                                                    <span class='x-red'>*</span>商品类型
                                                </label>
                                                <div class="layui-input-block">
                                                    <select th:name="goodsTypeName" th:id="goodsTypeName">
                                                        <option th:selected="selected" th:text="${good.goodstype.goodsTypeName}"
                                                                th:value="${good.goodstype.goodsTypeName}" th:title="原商品类型">
                                                        </option>
                                                        <option th:each="goodsTypeList:${allGoodsType}"
                                                                th:value="${goodsTypeList.getGoodsTypeName()}"
                                                                th:text="${goodsTypeList.getGoodsTypeName()}">
                                                        </option>
                                                    </select>
                                                </div>
                                            </div>
                                            <div class="layui-form-item">
                                                <label class="layui-form-label">
                                                    <span class='x-red'>*</span>价格
                                                </label>
                                                <div class="layui-input-block">
                                                    <input type="text" th:name="gNowPrice" th:id="gNowPrice" th:value="${good.getGNowPrice()}" autocomplete="off" placeholder="请输入商品现价"
                                                           class="layui-input" lay-verify="number">
                                                </div>
                                            </div>
                                            <!--               <div class="layui-form-item">
                                                               <label class="layui-form-label">
                                                                   <span class='x-red'>*</span>原价
                                                               </label>
                                                               <div class="layui-input-block">
                                                                   <input type="text" th:name="gOldPrice" th:id="gOldPrice" th:value="${good.getGOldPrice()}" autocomplete="off" placeholder="请输入商品原价"
                                                                          class="layui-input" lay-verify="number">
                                                               </div>
                                                           </div>-->
                                            <div class="layui-form-item">
                                                <label class="layui-form-label">
                                                    <span class='x-red'>*</span>商品规格
                                                </label>
                                                <div class="layui-input-block">
                                                    <input type="text" th:name="gSizeMsg" th:id="gSizeMsg" th:value="${good.getGSizeMsg()}" autocomplete="off" placeholder="请输入商品规格"
                                                           class="layui-input" lay-verify="required">
                                                </div>
                                            </div>
                                            <div class="layui-form-item">
                                                <label class="layui-form-label">
                                                    <span class='x-red'>*</span>库存
                                                </label>
                                                <div class="layui-input-block">
                                                    <input type="text" th:name="number" th:id="number" th:value="${good.getNumber()}" autocomplete="off" placeholder="请输入商品库存"
                                                           class="layui-input" lay-verify="number">
                                                </div>
                                            </div>

                                            <div class="layui-form-item">
                                                <label  class="layui-form-label">
                                                    <span class="x-red">*</span>商品缩略图
                                                </label>
                                                <div class="layui-input-inline">
                                                    <div class="site-demo-upbar">
                                                        <input type="file"  name="gPicture" id="gPicture"/>
                                                    </div>
                                                </div>
                                            </div>

                                            <div class="layui-form-item imgs" id="imgshow">
                                                <label  class="layui-form-label">商品缩略图展示
                                                </label>
                                                <img th:src="@{/upload/{id}(id=${good.getGPicture()})}" id="pimages" name="pimages" style="width: 400px;height: 200px;"/>
                                            </div>

                                            <br>
                                            <div class="layui-form-item" style="text-align: center;">
                                                <button th:type="button" class="layui-btn"  lay-filter="*" id="btn">保存
                                                </button>
                                            </div>
                    </form>
                    <div style="height:100px;"></div>
                </div>

              </div>
            </div> 
        </div>

        <script>
            //页面加载完成后
            $(function () {
                var file=document.getElementById("gPicture");
                file.onchange=function () {
                    var img=document.createElement("img");
                    img.src=window.URL.createObjectURL(file.files[0])
                    img.onload=function(){
                        window.URL.revokeObjectURL(this.src)
                    }
                    var newSrc=img.src;
                    $("#pimages").attr("src",newSrc);
                }
            });

            layui.use(['element','layer','form'], function(){
                $ = layui.jquery;//jquery
               lement = layui.element();//面包导航
              layer = layui.layer;//弹出层
              form = layui.form()
                okLoading.close($);
              })


            $("#gName").blur(function () {
                var gName = $("#gName").val();
                if(gName==null||gName==""){
                    layer.msg("商品名称不能为空!",{icon:2,time:1000});
                    return;
                }
            });
            $("#goodsTypeName").blur(function () {
                var goodsTypeName = $("#goodsTypeName").val();
                if(goodsTypeName==null||goodsTypeName==""){
                    layer.msg("请选择商品类型!",{icon:2,time:1000});
                    return;
                }
            });
            $("#gNowPrice").blur(function () {
                var gNowPrice = $("#gNowPrice").val();
                if(gNowPrice==null||gNowPrice==""){
                    layer.msg("请输入价格!",{icon:2,time:1000});
                    return;
                }
            });
            /*$("#gOldPrice").blur(function () {
                var gOldPrice = $("#gOldPrice").val();
                if(gOldPrice==null||gOldPrice==""){
                    layer.msg("请输入原价!",{icon:2,time:1000});
                    return;
                }
            });*/
            $("#gSizeMsg").blur(function () {
                var gSizeMsg = $("#gSizeMsg").val();
                if(gSizeMsg==null||gSizeMsg==""){
                    layer.msg("请商品规格!",{icon:2,time:1000});
                    return;
                }
            });
            $("#number").blur(function () {
                var number = $("#number").val();
                if(number==null||number==""){
                    layer.msg("请商品库存!",{icon:2,time:1000});
                    return;
                }
            });
            $("#btn").click(function () {
                //数据来源于表单,表单数据封装到data中
                var gName = $("#gName").val();
                var goodsTypeName = $("#goodsTypeName").val();
                var gSizeMsg = $("#gSizeMsg").val();
                var number = $("#number").val();
                var gNowPrice = $("#gNowPrice").val();
                var formData=new FormData();
                var file = document.getElementById('gPicture').files[0];
                formData.append("gName",gName);
                formData.append("goodsTypeName",goodsTypeName);
                formData.append("gSizeMsg",gSizeMsg);
                formData.append("number",number);
                formData.append("gNowPrice",gNowPrice);
                formData.append("gPicture1",file);
                if(data(gNowPrice)==false){
                    return;
                }
                if(data(number)==false){
                    return;
                }
                if(dataInt(number)==false){
                    return;
                }
                // var param={"gName":gName,"gNowPrice":gNowPrice,"number":number,"gSizeMsg":gSizeMsg,"gPicture1":gPicture,"goodsTypeName":goodsTypeName};
                $.ajax({
                    //前部分的双引号可要可不要
                    "url":"/goodUpdate",
                    "data":formData,//传给服务端的数据
                    "type":"POST",//请求类型
                    "contentType":false, //提交给服务端的数据类型是否当成字符串处理,false不当成字符串
                    "processData":false,//是否处理提交数据,false不处理
                    "dataType":"json",//服务端返回的数据类型
                    success:function (data) {//回调函数
                        if(data.state==200){
                            layer.msg(data.msg,{icon:1,time:1000});
                            location.href = "/findAllGoodsByUid";
                            //将图片路径显示到<img>的src属性
                            /*  $("#imgNew").attr("src","${pageContext.request.contextPath}/"+"upload/"+data.path);
                              $("#imgOld").attr("src","${pageContext.request.contextPath}/"+"upload/"+data.pa);*/
                            //将修改后文件名保存在cookie中
                            /*$.cookie("image",data.path,7);*/
                        }else{
                            layer.msg(data.msg,{icon:2,time:1000});
                        }
                    }
                })
            });
            

            function data(val) {
                //浮点型
                var regPos = /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
                if(regPos.test(val)==false){
                    layer.msg("请输入数字!",{icon:2,time:1000});
                    return false;
                }
            }
            function dataInt(val) {
                //浮点型
                var regPos = /^\d+$/;
                if(regPos.test(val)==false){
                    layer.msg("库存请输入整数!",{icon:2,time:1000});
                    return false;
                }
            }

        </script>


    </body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值