layui模型——头像上传到本地并在jsp中获取

 <div >
    <button type="button" class="layui-btn" id="tx"   >
        <i class="layui-icon">&#xe67c;</i>上传头像</button>
        <img id="txk" name="imag" style="transform:scale(2);" class="layui-nav-img"  >
    </div>

上为前端代码

下为js

<%--头像上传--%>
<script>
    layui.use('upload', function(){
        var upload = layui.upload;

        //执行实例
        var uploadInst = upload.render({
            elem: '#tx' //绑定元素,button的id
            ,url: 'lha/txUpload' //上传接口,后台处理接口
             //,auto: false //不自动上传,这个最好打开,不然后面用户只是点击图片就自动上传了
            // ,bindAction: '#LAY-user-back-submit' // 绑定上传按钮
            ,accept: 'images' // 只允许上传图片
            ,acceptMime: 'image/*'  // 打开文件选择器时只显示图片
            ,choose: function(obj){// 头像回调显示
                //预读本地文件示例,不支持ie8
                obj.preview(function(index, file, result){
                    $('#txk').attr('src', result); //图片链接(base64)
                });
            }
            ,done: function(res){
                //上传完毕回调
            }
            ,error: function(){
                //请求异常回调
            }
        });
    });
</script>

图片上传到本地文件夹(controller层)

这里面图片名称需要根据自己配置的虚拟路径配合,不然路径不对,图片无法显示

/*
* 文件上传
* */
String path;
    public void setPath(String path){
        this.path=path;
    }
    public String getPath(){
        return this.path;
    }
  @ApiOperation("文件上传")
  @ApiResponses({
          @ApiResponse(code=20000,message = "头像上传成功"),
          @ApiResponse(code=20001,message = "头像上传失败")
  })
  @PostMapping("/txUpload")
  public MSG upload( @RequestParam("file")MultipartFile file,Model m){
    try {
      User user=new User();
    // 获取图片名称
    String fileName = file.getOriginalFilename();
    log.info("图片名称:{}",fileName);
    //上传文件存储的位置
        String filePath="D:/File/images/";
   //图片的名称用于传输到数据库
//防止该文件夹不存在,创建一个新文件夹
    File destFile = new File(filePath,fileName);
        setPath("/lh/images/"+fileName);
    destFile.getParentFile().mkdirs();
    //将文件存储到该位置
      file.transferTo(destFile);
    }
    catch (IOException e) {
      e.printStackTrace();
      return MSG.error().message("上传失败"+e.getMessage());
    }
    return MSG.success();
  }

 上传到数据库的格式

 

上传头像地址到数据库(controller层)

注册功能头像上传的部分的代码

 @PostMapping("/zcupdata")
  public MSG zcupdata(Long id,String uname,String password,String sex,String quanxian,String miaoshu){
    //进行数据更新
      if(getPath()==null){     //如果注册时没有上传图像,就返回code值为1,提醒用户上传头像
          return MSG.error().code(1);
      }
      String path="file:///D:/File/images/"+getPath();//本地的图片存储位置
    try {
    userService.zcupdata(id,uname,password,sex,quanxian,path,miaoshu);
    }catch (Exception e){
     e.printStackTrace();
     return MSG.error();
    }
    return MSG.success();
  }

Service层接口

void zcupdata(Long id, String uname, String password, String sex,String quanxian, String imag, String miaoshu);//注册

业务逻辑层(ServiceImpl)

//注册
    @Override
    public void zcupdata(Long id, String uname, String password,String sex, String quanxian, String imag, String miaoshu) {
        User user=new User();
        user.setId(id);
        user.setUname(uname);
        user.setSex(sex);
        user.setImag(imag);
        int qx=0;
        if(quanxian!=null&&quanxian!=""){
          qx=Integer.valueOf(quanxian);
        }
        user.setQuanxian(qx);
        user.setPassword(password);
        user.setMiaoshu(miaoshu);
        int res=userMapper.insert(user);
    }

测试:

点击立即提交

数据库 

 复制imag地址在浏览器打开

图片上传到本地后还需要进行配置虚拟路径,不然图片无法在html中显示

创建配置文件

编写配置文件内容

@Configuration
public class MywebAppConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
  registry.addResourceHandler("/images/**").addResourceLocations("file:///D:/File/images/");
    }
//    配置本地资源映射地址
//file:///D:/File/images/是本地图片存储的位置
///images/**是虚拟路径
}

前面的/lh是配置web时候添加的(名字可自定义更改),好像是什么web本地存储的路径,反正添加上就对了,不然显示404

 

 

 将登录获取的user存储到session中通过session中${sessionScope.user.imag}获取图片路径

相当于在本地获取路径file:///D:/File/images/111.jpg

登录的数据存储到session

Controller层

@PostMapping("/login")
  public MSG login(Long id,String password,HttpSession session){  //参数名称要与登录框name一致才可以接收到数据
    log.debug("接收到用户名:{},接收密码:{}",id,password);
    //进行登录
  try {
    User user=userService.login(id,password);
    //将登录成功的用户存储到session中
    session.setAttribute("user",user);  //名称要一样,不然前端jsp中${sessionScope.user.uname}获取不到
    return MSG.success();
  }catch (Exception e) {
    e.printStackTrace();
    return MSG.error();
  }

ServiceImpl层

 //登录
    @Override
    public User login(Long id, String password) {
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        wrapper.eq("id",id);
        wrapper.eq("password",password);
        User one=super.getOne(wrapper);
        if (one==null){
            throw new RuntimeException("账号或密码错误");
        }
        return one;
    }

 <img src="${sessionScope.user.imag}" class="layui-nav-img" style="transform:scale(2);margin: 20%  0px 0px 45%"></div>

相当于src=/lh/images/111.jpg=file:///D:/File/images/111.jpg

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值