layui中表单上传图片的方法

项目场景:

layui通过表单上传图片:
项目场景:项目练习时候遇到一个问题,在使用layui框架时在表单提交图片时遇到的问题。


思路:

因为表单的数据要提交到数据库中就需要考虑图片在数据库中的方式。

有两种存取方式:

  1. 把图片直接以二进制形式存储在数据库中
  2. 图片存储在磁盘上,数据库字段中保存的是图片的路径。

具体实现思路:

选用了第二种方式:
1.给layui中自带的上传图片模块单独写一个接口,
2.在图片时就访问这个接口,将图片以二进制的形式传到接口中处理。
3.在接口中将处理好的文件放到指定的文件路径下。
4.再回传一个json格式的数据,包含操作好的图片路径。
5.将图片路径赋值给表单中相应的项,然后提交表单。


具体代码:

HTML代码:

其中隐藏的input框用来放回传的图片路径,注意要给id

注意:查看时显示图片可以在form.val(‘表单’,function){}中用$('#demo1').attr('src','路径'+data.teaPhoto);

<input type="hidden" name="teaPhoto" id="teaimg">
            <div class="layui-upload">
                <label class="layui-form-label">照片</label>
                <button type="button" class="layui-btn" id="test1">上传图片</button>
                <div class="layui-upload-list">
                    <img style="height: 150px; width: 112px" class="layui-upload-img" id="demo1">
                    <p id="demoText"></p>
                </div>
                <div style="width: 95px;"></div>
            </div>

js代码

 layui.use('upload',function () {
   var upload = layui.upload;
    upload.render({
    elem: '#test1'
    ,url: '${pageContext.request.contextPath}/teacher/upload' //写自己接口的路径
    ,before: function(obj){
     obj.preview(function(index, file, result){
      $('#demo1').attr('src', result);
      });
      }
      ,done:function (res) {
              console.log(res)
               if(res.code<0){
                  return layer.msg('上传失败');
                 } 
               //成功
              var demoText = $('#demoText');
              demoText.html('<span style="color: #4cae4c;">上传成功</span>');//上传成功的提示消息

           var fileupload = $('#teaimg');
           fileupload.attr("value",res.src);//给input框赋值,src是回传的图片名称/路径
              }
             });
            })//文件上传

java代码

@Controller
@RequestMapping("/teacher")
@ResponseBody
@RequestMapping("/upload")
    public Map upload(@RequestParam(value="file") CommonsMultipartFile file){
        System.out.println(file.getOriginalFilename());
        String newFileName=file.getOriginalFilename();
        File file1 = new File("C:\\Users\\src\\main\\webapp\\images\\"+newFileName);

        try {
            file.transferTo(file1);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Map<String,Object> map=new HashMap<>();
        map.put("code",1);
        map.put("msg","");
        map.put("src",newFileName);
        return map;
        //回传json格式的图片名称
            }


可能会遇到一些问题,参考一下解决方法

需要在pom.xml中导入上传文件
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
需要在dispatcher-servlet.xml配置

 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置请求编码格式-->
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
layui ,图片上传组件包括两个方法,一个是上传方法 `upload`,一个是删除方法 `delete`。如果需要在其他方法引用删除方法,可以在上传组件初始化时将删除方法保存在变量,然后在需要的地方调用该方法即可。 例如,假设在某个页面需要使用图片上传组件,并且在表单提交时需要将上传的图片一起提交到服务器。在初始化图片上传组件时,可以将删除方法保存在变量,然后在表单提交时调用该方法。 ``` // 初始化图片上传组件 layui.use(['upload', 'layer'], function() { const upload = layui.upload; const layer = layui.layer; // 保存删除方法 let deleteMethod; // 初始化上传组件 upload.render({ elem: '#upload-btn', // 绑定元素 url: '/upload', // 上传接口 done: function(res) { // 上传成功回调 console.log(res); // 保存删除方法 deleteMethod = res.deleteMethod; }, error: function() { // 上传失败回调 layer.msg('上传失败'); } }); // 提交表单 function submitForm() { // 获取表单数据 const formData = { // ... }; // 调用删除方法 if (deleteMethod) { deleteMethod(); } // 提交表单数据 // ... } }); ``` 在上面的代码,首先使用 `layui.use()` 方法引入图片上传组件和弹窗组件,然后初始化上传组件,在上传成功回调保存删除方法。最后,在提交表单方法调用删除方法。 需要注意的是,上传成功回调返回的 `res` 对象可能包含多个文件的删除方法,如果需要删除指定文件,需要根据实际情况选择相应的删除方法。另外,删除方法只能在上传成功后才能获取到,如果在初始化上传组件时就需要使用删除方法,可以在上传失败回调设置一个默认值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值