2021-05-24

Java上传图片功能(思路:前端发送Ajax请求携带表单所有数据,后台接收(file必须使用MultipartFile接收),上传操作:获取上传的路径,获取输入流,需要拼接上传上来图片的名称,创建输出流,在把获取到的名称和路径设置到实体类中,使用IOUtils复制一份即可)

1.前端有一个form表单:

          必须满足上传三要素:

                     A.form表单enctype属性必须为"multipart/form-data"

                    B.form表单method属性必须为"post"

                    C.input中type属性必须为"file"  

2.前端发送ajax请求(使用ajaxSubmit方法,需要导入jquery-form.js)

// 保存操作绑定修改添加确定按钮点击事件
    $("#saveButton").click(function(){
        // 发送保存请求,会携带form表单中的所有数据
        $("#saveForm").ajaxSubmit({
            success: function(msg){
                if(msg.success){
                    // 成功
                    // 关闭模态框
                    $("#saveModal").modal("hide");
                    // 刷新表格
                    GridManager.refreshGrid("demo-ajaxPageCode");
                }else{
                    // 失败
                    alert("保存失败");
                }
            }
        })
    });

 3.后台操作

  A.controller层(AjaxResult是封装的一个,响应到前端的成功,和失败信息)

   @ResponseBody
    @RequestMapping("/save")
    public AjaxResult save(Slide slide,MultipartFile photo, HttpServletRequest req){
        try {
            service.save(slide,photo,req);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, "保存失败");
        }
    }

 B.service层

@Override
    public void save(Slide slide, MultipartFile photo, HttpServletRequest req) throws IOException {
        // 上传操作
        // 获取路径
        String realPath = req.getServletContext().getRealPath("/upload");
        File file2 = new File(realPath);
        if(!file2.exists()){
            file2.mkdirs();
        }
        if(photo!=null){
            // 获取输入流
            InputStream input = photo.getInputStream();
            // 拼接名称
            String filename = photo.getOriginalFilename();
            String suffix = filename.substring(filename.lastIndexOf("."));
            String name = System.currentTimeMillis()+suffix;
            
            // 创建输出流
            File file = new File(realPath, name);
            FileOutputStream output = new FileOutputStream(file);
            
            // 把name和path设置到slide中
            slide.setName(name);
            slide.setPath("/upload/"+name);
        
            // 核心代码
            IOUtils.copy(input, output);
            
            // 关流
            output.close();
            input.close();
        }
        // 判断是添加操作还是修改操作
        if(slide.getId()==null){
            if(photo!=null){
                // 添加操作
                mapper.add(slide);
            }
            
        }else{
            if(photo!=null){
                // 查询数据库path
                Slide dbSlide = mapper.findById(slide.getId());
                File file = new File(realPath, dbSlide.getName());
                // 删除图片
                if(file.exists()){
                    file.delete();
                }
            }
            // 修改
            mapper.update(slide);
        }
    }

C.mapper层sql

   <!-- void add(Slide slide); -->
    <insert id="add">
        insert into t_slide(name,path,createDate,enable) values(#{name},#{path},#{createDate},#{enable})
    </insert>
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值