SSM+layUI上传图片,配置tomcat虚拟路径,保存图片到项目中

6 篇文章 0 订阅
5 篇文章 0 订阅

本博文为原创,如有不足,欢迎指出,转载请注明来源。

最近在用SSM+layUI做上传图片时遇到了很多问题,特在此记录一下。

先将整体页面效果和问题发下,最后再贴代码。

首先楼主的 页面如下:


上传头像后:


在这里选择图片后,因为有图片的预览,在上传成功的回调函数中一定要对上传按钮的样式进行修改,否则样式会很难看,如下:


图片预览与修改的代码如下:

 //上传成功
      if(res.code==0){
        $('.upload-img').html('<img class="layui-upload-img" style="width:80px;height:100px" src="'+res.src+'" id="demo1"> <p id="demoText"></p>');
         $('.layui-btn-img').css({"margin-left":"104px","width":"90px","margin-top":"6px"});
        $('.layui-btn-img').text("重新上传");      
        return layer.msg('上传成功',{time:700});
      }

上传图片时,用String path = request.getSession().getServletContext().getRealPath("/")获取到的路径是服务器的路径,图片在上传后是保存到服务器的,项目从服务器移除后图片就没有了(可以移除前拷贝出来备份),为解决这个问题可以配置tomcat的虚拟路径。

在tomcat的server.xml的HOST节点中加:

<Context path="/plug-in/images/people" docBase="C:\Users\lenove\Desktop\why123\why123\src\main\webapp\plug-in\images\people"

docBase为你要保存的项目路径,如想保存到项目中,可以写项目的路径。

path为调用图片的路径:如调用a.jpg

/plug-in/images/people/a.jpg

下面贴详细的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
        <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新增用户</title>
<%@include file="/plug-in/main/main-js.jsp" %>
</head>
<body>
<div>
<form class="layui-form" action="" method="post" enctype="multipart/form-data" lay-filter="user-edit">
  <div class="layui-form-item" style="margin-top:15px;width:500px;">
      <label class="layui-form-label">头像</label>
      <div class="layui-upload">
      <div class="layui-upload-list">
      <div class="upload-img"></div>
            <p id="demoText"></p>
		    <button type="button" class="layui-btn layui-btn-img" lay-verify="required" id="test1">上传头像</button>
        </div> 
    </div>
    </div>
  <div class="layui-form-item" style="margin-top:15px;width:500px;">
    <label class="layui-form-label">用户名</label>
    <div class="layui-input-block">
      <input type="text" name="userName" lay-verify="userName" autocomplete="off" placeholder="请输入用户名" class="layui-input" value="">
    </div>
  </div>
  <div class="layui-form-item" style="margin-top:15px;width:500px;">
    <label class="layui-form-label">密码</label>
    <div class="layui-input-block">
      <input type="password" name="password" lay-verify="password" placeholder="请输入密码" autocomplete="off" class="layui-input" value="">
    </div>
  </div>
   <div class="layui-form-item">
    <label class="layui-form-label">性别</label>
    <div class="layui-input-block">
      <input type="radio" name="gender" value="男" title="男" checked="">
      <input type="radio" name="gender" value="女" title="女">
    </div>
  </div>
    <div class="layui-form-item" style="margin-top:15px;width:500px;">
      <label class="layui-form-label">手机号</label>
      <div class="layui-input-block">
        <input type="tel" name="phone" lay-verify="required|phone" placeholder="请输入手机号" autocomplete="off" class="layui-input" value="">
      </div>
    </div>
    <div class="layui-form-item" style="margin-top:15px;width:500px;">
      <label class="layui-form-label">邮箱</label>
      <div class="layui-input-block">
        <input type="email" name="phone" lay-verify="required|email" placeholder="请输入邮箱" autocomplete="off" class="layui-input" value="">
      </div>
    </div>
  <div class="layui-form-item">
    <div class="layui-input-block">
      <button class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
      <button type="reset" class="layui-btn layui-btn-primary">重置</button>
    </div>
  </div>
</form>
</div>
<script type="text/javascript">
layui.use(['form', 'layedit', 'laydate'], function(){
  var form = layui.form
  ,layer = layui.layer
  ,layedit = layui.layedit
  ,laydate = layui.laydate;
  
  //日期
  laydate.render({
    elem: '#date'
  });
  laydate.render({
    elem: '#date1'
  });
  
  //创建一个编辑器
  var editIndex = layedit.build('LAY_demo_editor');
  form.val('user-edit', {   
    "gender":'${user.gender}'
  });
  //自定义验证规则
  form.verify({
    userName: function(value){
      if(value.length < 3){
        return '用户名至少得3个字符';
      }
      if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){
      return '用户名不能有特殊字符';
    }
    }
    ,password:[/(.+){6,12}$/, '密码必须6到12位']
    ,content: function(value){
      layedit.sync(editIndex);
    }
  });
  //监听提交
  form.on('submit(demo1)', function(data){
    layer.alert(JSON.stringify(data.field), {
      title: '最终的提交信息'
    })
    return false;
  });
});

layui.use('upload', function(){
  var $ = layui.jquery
  ,upload = layui.upload;
  //普通图片上传
  var uploadInst = upload.render({
    elem: '#test1'
    ,method:'post'
    ,url: '/why123/user/uploadHeadImage'    
    ,done: function(res){
      //如果上传失败
      if(res.code > 0){
        return layer.msg('上传失败');
      }
      //上传成功
      if(res.code==0){
        $('.upload-img').html('<img class="layui-upload-img" style="width:80px;height:100px" src="'+res.src+'" id="demo1"> <p id="demoText"></p>');
        $('.layui-btn-img').css({"margin-left":"104px","width":"90px","margin-top":"6px"});
        $('.layui-btn-img').text("重新上传");      
        return layer.msg('上传成功',{time:700});
      }
    }
  }); 
 });
</script>
</body>
</html>

上传图片controller层:

// 用户头像上传
	@RequestMapping(value = "/uploadHeadImage", method = { RequestMethod.POST })
	@ResponseBody
	public JSONObject uploadHeadImage(@RequestParam("file") MultipartFile file, @ModelAttribute User user, HttpServletRequest request, InputStream stream)
			throws IOException {
		Assert.notNull(file, "上传文件不能为空");
		String src="/plug-in/images/people/";
		//String path = request.getSession().getServletContext().getRealPath("/"+src);
		String path="C:/Users/lenove/Desktop/why123/why123/src/main/webapp/plug-in/images/people";
		JSONObject json = new JSONObject();
		//System.currentTimeMillis()根据系统时间产生随机数,保证上传的图片名字不一样
		String name=System.currentTimeMillis()+file.getOriginalFilename();
		File dir = new File(path, name);
		src=src+name;
		if (!dir.exists()) {
			dir.mkdirs();
			json.put("msg","上传成功");
			json.put("code",0);
			json.put("src",src);
		} else {
			json.put("msg","上传失败");
			json.put("code",1);
		}
		file.transferTo(dir);
		return json;
	}

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_39098505

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值