实现springmvc多图片上传到服务器并且保存到数据库,提交方式:表单提交 ,SSM框架

前天公司要求做一个表单,有3张图片需要存到服务器和数据库,3张图片对应3个字段,图片直接放在upload下面 不是图片服务器,图片不会重复。

如下表单:


前端代码: 没有用预览的功能,懒得弄 样式也没调,直接拿bootstrap的表单构造器弄出来的。

<h3>商铺入驻申请表</h3>
                        <form id="form" name="form" class="form-horizontal" action="/addStore" method="post" enctype="multipart/form-data">
                            <fieldset>
                                <div class="control-group">
                                    <!-- Text input-->
                                    <div class="controls">
                                        <label class="control-label" >会员ID:</label> <input type="text" placeholder="" class="input-xlarge" name="appId" required="required">
                                        <p class="help-block">对应个人中心的邀请码ID</p>
                                    </div>
                                </div>

                                <div class="control-group">

                                    <!-- Text input-->

                                    <div class="controls">
                                        <label class="control-label" >法定代表人姓名:</label>  <input type="text" placeholder="" class="input-xlarge" name="name" required="required">
                                        <p class="help-block">营业执照上的法定代表人姓名</p>
                                    </div>
                                </div>

                                <div class="control-group">

                                    <!-- Text input-->

                                    <div class="controls">
                                        <label class="control-label">手机号码:</label>   <input type="text" placeholder="" class="input-xlarge" name="phone" required="required">
                                        <p class="help-block">法定代表人手机号码</p>
                                    </div>
                                </div>

                                <div class="control-group">

                                    <!-- Text input-->

                                    <div class="controls">
                                        <label class="control-label">邮箱:</label>    <input type="text" placeholder="" class="input-xlarge" name="email" required="required">
                                        <p class="help-block">法定代表人邮箱</p>
                                    </div>
                                </div>

                                <div class="control-group">

                                    <!-- Text input-->

                                    <div class="controls">
                                        <label class="control-label" >身份证号码:</label>   <input type="text" placeholder="" class="input-xlarge" name="idNumber" required="required">
                                        <p class="help-block">法定代表人身份证号码</p>
                                    </div>
                                </div>

                                <div class="control-group">


                                    <!-- File Upload -->
                                    <div class="controls">
                                        <label class="control-label">身份证正面照片:</label>  <input class="input-file"  type="file" name="file" required="required"  multiple="multiple">
                                    </div>
                                </div>
                                <p></p>
                                <div class="control-group">
                                    <!-- File Upload -->
                                    <div class="controls">
                                        <label class="control-label">身份证反面照片:</label> <input class="input-file" name="file1" type="file" required="required"  multiple="multiple">
                                    </div>
                                </div>
                               <p></p>
                                <div class="control-group">

                                    <!-- Text input-->

                                    <div class="controls">
                                        <label class="control-label" >工商户名称:</label>  <input type="text" placeholder="" class="input-xlarge" name="storeName" required="required">
                                        <p class="help-block">营业执照名称</p>
                                    </div>
                                </div>

                                <div class="control-group">


                                    <!-- File Upload -->
                                    <div class="controls">
                                        <label class="control-label">营业执照副本:</label>  <input class="input-file" name="file2" type="file" required="required"  multiple="multiple">
                                    </div>
                                </div>
                                <p></p>
                                <div class="control-group">
                                    <!-- Text input-->

                                    <div class="controls">
                                        <label class="control-label" >营业执照所在地</label>  <input type="text"  name="storeAdd" class="input-xlarge" required="required">
                                        <p class="help-block">营业执照所在地区</p>
                                    </div>
                                </div>

                                <input type="checkBox" onclick="if (this.checked) {enable()} else {disable()}">   <a href="#">同意入驻协议</a>
                                <p></p>
                                <!-- Button -->
                                <div class="controls">
                                    <input class="btn btn-success" id="accept" type="submit" disabled="true"/>
                                </div>
                            </fieldset>
                        </form>

提交方式为表单提交 input标签type="submit",如果是ajax提交type="button",

 <input class="btn btn-success" id="accept" type="submit" disabled="true"/>

上传图片的type="file",multiple="multiple",name对应后台字段,我这边有三个 分别是file file1 file2

图片按钮1:<label class="control-label">身份证正面照片:</label>  <input class="input-file"  type="file" name="file" required="required"  multiple="multiple">
图片按钮2:<label class="control-label">身份证反面照片:</label> <input class="input-file" name="file1" type="file" required="required"  multiple="multiple">
图片按钮3:<label class="control-label">营业执照副本:</label>  <input class="input-file" name="file2" type="file" required="required"  multiple="multiple">

还要注意form标签  enctype=nultipart/form-data

 <form id="form" name="form" class="form-horizontal" action="/addStore" method="post" enctype="multipart/form-data">

对应后台接口,我用的是SSM框架,

controller层,一个对象,三个MultipartFile file0 file1 file2 分别对应前端的三个上传图片的name,由于是3个图片放在三个字段里面,所有需要3个MultipartFile。(如果是放在一个multipartFile对象的话不知道怎么弄。放在集合里面在遍历出来吗?)

使用UUID重命名,在获取文件扩展名,保存到服务器,在保存到数据库。把3个文件参数分别set到Store对象对应的字段里去。

还有就是我这个方法的返回值用的是String的如果成功就跳转到success页面,没用json的

 //申请入驻表单
    @RequestMapping("/addStore")
    public String addStore(HttpServletRequest request, Store storeIn, MultipartFile file, MultipartFile file1, MultipartFile file2) throws IOException {
        //使用UUID重命名图片 避免重复
        String name = UUID.randomUUID().toString().replaceAll("-", "");
        String name1 = UUID.randomUUID().toString().replaceAll("-", "");
        String name2 = UUID.randomUUID().toString().replaceAll("-", "");
        //获取文件扩展名
        String ext = FilenameUtils.getExtension(file.getOriginalFilename());
        String ext1 = FilenameUtils.getExtension(file1.getOriginalFilename());
        String ext2 = FilenameUtils.getExtension(file2.getOriginalFilename());
        //设置图片上传路径
        String url = request.getSession().getServletContext().getRealPath("/upload");
        //以绝对路径保存重命名后的图片
        file.transferTo(new File(url + "/" + name + "." + ext));
        file1.transferTo(new File(url + "/" + name1 + "." + ext1));
        file2.transferTo(new File(url + "/" + name2 + "." + ext2));
        //把图片路径存到数据库
        storeIn.setIdImgFront("http://localhost:8080/" + "upload/" + name + "." + ext);
        storeIn.setIdImgRever("http://localhost:8080/" + "upload/" + name1 + "." + ext1);
        storeIn.setStoreImage("http://localhost:8080/" + "upload/" + name2+ "." + ext2);
        //给状态码设置默认值
        storeIn.setStatus(0);
        storeService.addStore(storeIn);
        return "/success";

    }
service层就是直接调用mybatis逆向生成的insert方法,判断一下是否为0就ok
 @Resource
    StoreMapper storeMapper;
    
    @Override
    public ServerResponse<String> addStore(Store store) {
        int insert = storeMapper.insert(store);
        if (insert == 0) {
            return ServerResponse.createByErrorMessage("添加失败");
        }
        return ServerResponse.createBySuccessMessage("添加成功");
    }

数据库字段

 upload文件夹里面


取出来是这个样子的

整个流程就是这样,下一篇把表单对象取出来显示到前端去。

猜你喜欢

转载自blog.csdn.net/a738837088/article/details/80731592
今日推荐