layui上传图片到服务器的非项目目录下的方法


Posted in Javascript onSeptember 26, 2019

1、layui没办法与form表单中的其他字段一同提交到后台,所以只能通过先提交图片,然后通过返回的图片的值来提交到数据库

2、先将所需要的jar包导入,我是用的maven所以,需要在父pom.xml文件中添加下面两个jar包(版本自己选择)

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.1</version>
</dependency>
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.4</version>
</dependency>

3、然后编写前台页面

如果只需要上传一张图片可以看上传logo的步骤,多张的话可以看上传图片的步骤

<div>
  <label class="layui-form-label">logo</label>
  <div class="layui-input-block">
    <button type="button" class="layui-btn" id="uploadLogo">
      <i class="layui-icon"></i>选择logo
    </button>
    <div class="layui-upload-list">
      <!-- 为了回显 -->
      <img class="layui-upload-img" id="upload-logo" width="150px" src="${educationalType.edLogo}">
    </div>
    <button type="button" class="layui-btn" id="submit_logo">开始上传
    </button>
    <input id="logoText" name="edLogo" type="hidden" />
  </div>
</div>
<div>
  <label class="layui-form-label">图片</label>
  <div class="layui-input-block">
    <button type="button" class="layui-btn" id="uploadImage">
      <i class="layui-icon"></i>选择图片
    </button>
    <div class="layui-upload-list" id="imageView">
      <c:if test="${pageFlag == 'updatePage' and educationalType.edImage1 != null}">
        <img class="layui-upload-img" id="upload-image1" width="150px" src="${educationalType.edImage1}" >
      </c:if>
      <c:if test="${pageFlag == 'updatePage' and educationalType.edImage2 != null}">
        <img class="layui-upload-img" id="upload-image2" width="150px" src="${educationalType.edImage2}">
      </c:if>
    </div>
    <button type="button" class="layui-btn" id="submit_image">开始上传</button>
    <input id="imageText" name="edImage" type="hidden" />
  </div>
</div>

上图中input和img的目的是为了可以接收返回值,从而在提交时可以将图片信息上传到后台

<script type="text/javascript">

  //上传logo
  layui.use('upload', function(){
    var $ = layui.jquery,
    upload = layui.upload;

    //选完文件后不自动上传
    upload.render({
      elem: '#uploadLogo',
      url: '${ctx}/upload/uploadLogoToServer.do',
      auto: false,
      //multiple: true,
      choose: function(obj){
        console.log(obj)
        //预读本地文件示例,不支持ie8
        obj.preview(function(index, file, result){
          $('#upload-logo').attr('src', result); //图片链接(base64)
          $("#img_url").attr('value',result);
        });
      },
      bindAction: '#submit_logo',
      done: function(res){
        $("#logoText").attr('value',res.url);
        console.log(res)
        return layer.msg(res.msg,{icon: res.status,time: 2000});
      }
    });

  //上传图片
    var fileCount = 0;//控制文件数量
    var maxFileCount = 2;//文件上传最大数量,如果没有限制上传文件的数量则不需要
    var maxFileSize = 20;//文件上传最大大小
    var resultValue = 0;
    var url = "";
    upload.render({
      elem: '#uploadImage',
      url: '${ctx}/upload/uploadImageToServer.do',
      auto: false,
      //multiple: true,
      choose: function(obj){
        var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
        //layer.load();
        console.log(obj)
        //预读本地文件示例,不支持ie8
        obj.preview(function(index, file, result){
          fileCount++;
          if(fileCount>maxFileCount){
            fileCount = maxFileCount;
            layer.msg('文件数量不得超过'+maxFileCount+'个',{icon:2});
            return;
          }
          //在当前ID为“imageView”的区域显示图片
          $('#imageView').append('<img name = "edImage" ' +
            'style="width: 150px; margin-left: 8px;" ' +
            'src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img">')
        });
      },
      bindAction: '#submit_image',
      done: function(res){
        if(resultValue < 2){
          url = url + res.url + ",";
        }
        if(resultValue == 1){
          $("#imageText").attr('value',url);
        }
        resultValue++;
        console.log(res)
        return layer.msg(res.msg,{icon: res.status,time: 2000});
      }
    });
  });
</script>

4、因为layui在上传多张图片的时候是通过多次请求传递过去,所以是数据是一条一条的接收的,如果你需要回显,那么就需要在后台进行拼接,不拼接很可能会出现只传返回一张图片的信息

UploadCollect

@RequestMapping(value = "/uploadImageToServer.do")
@ResponseBody
public ResultMsg insertImageToEducational(@RequestParam(value = "file")MultipartFile[] files) throws Exception {
  ResultMsg msg = new ResultMsg();
  String url = "";
  for (int i=0,length = files.length; i < length; i++) {
    if(files[i] != null && !files[i].isEmpty()) {
      //获取路径,路径我写的是固定路径,直接映射到服务器根目录下的/usr/Images/logo
      String upload_path = IMAGE_ROOT_URL;
      String upload_fileName = FileUpload.uploadFile(files[i], upload_path);
      msg.setStatus(0);
      url = url + upload_fileName;
    }else {
      msg.setStatus(1);
      msg.setMsg("上传失败");
      msg.setUrl("给一个失败的图片路径");
      return msg;
    }
  }
  msg.setStatus(1);
  msg.setMsg("上传成功");
  msg.setUrl(url);
  return msg;

}

FileUpload

public static String uploadFile(MultipartFile multipartFile, String path) throws Exception {
  File file = new File(path);
  if (!file.exists()) {
    file.mkdirs();
  }
  FileInputStream fileInputStream = (FileInputStream) multipartFile.getInputStream();
  String fileName = UUID.randomUUID() + multipartFile.getOriginalFilename();
  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path + File.separator + fileName));
  byte[] bs = new byte[1024];
  int len;
  while ((len = fileInputStream.read(bs)) != -1) {
    bos.write(bs, 0, len);
  }
  bos.flush();
  bos.close();
  return fileName;
}

5、这就是图片上传的步骤

以上这篇layui上传图片到服务器的非项目目录下的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
javascript实现禁止复制网页内容汇总
Dec 30 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
js 动态生成html 触发事件传参字符转义的实例
Feb 14 Javascript
完美实现js选项卡切换效果(一)
Mar 08 Javascript
React中使用collections时key的重要性详解
Aug 07 Javascript
Angular 2.0+ 的数据绑定的实现示例
Aug 09 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
这15个Vue指令,让你的项目开发爽到爆
Oct 11 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 #Javascript
vue实现全匹配搜索列表内容
Sep 26 #Javascript
vue实现节点增删改功能
Sep 26 #Javascript
浅谈layui里的上传控件问题
Sep 26 #Javascript
layui实现多图片上传并限制上传的图片数量
Sep 26 #Javascript
layui 阻止图片上传的实例(before方法)
Sep 26 #Javascript
layui 上传图片 返回图片地址的方法
Sep 26 #Javascript
You might like
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP print类函数使用总结
2010/06/25 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python写的一个squid访问日志分析的小程序
2014/09/17 Python
python实现获取Ip归属地等信息
2016/08/27 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Python装饰器结合递归原理解析
2020/07/02 Python
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
优良学风班申请材料
2014/02/13 职场文书
二年级评语大全
2014/04/23 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
销售顾问工作计划书
2014/09/15 职场文书
先进个人推荐材料
2014/12/29 职场文书
会计试用期自我评价
2015/03/10 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
结婚司仪主持词
2015/06/29 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
Java中API的使用方法详情
2022/04/06 Java/Android