注意:只可用于数据量较小的项目,数据量庞大的项目不要用这个,否则会造成图片数量庞大,至服务器运行速度变慢或瘫痪

  HTML代码

  1. //前端使用的是layui框架
    <div class="layui-form-item">
  2. <div class="layui-input-block">
  3.     <!-- 上传按钮 -->
  4. <button type="button" class="layui-btn" id="uploadPic"><i class="layui-icon"></i>选择图片</button>
  5. <button type="button" class="layui-btn layui-btn-warm" id="uploadPicBtn">开始上传</button>
  6.     <!-- 隐藏的input,一个隐藏的input(用于保存文件url -->
  7.     <input type="hidden" id="img_url" name="img" value=""/>
  8.     <!-- 预览区域 -->
  9. <div class="layui-upload-list">
  10.       <img class="layui-upload-img" width="100px" height="80px" id="preShow"/>
  11.       <p id="demoText"></p>
  12. </div>
  13. </div>
  14. </div>

  JS代码

  1. //上传图片
    var uploadInst = upload.render({
    elem: '#uploadPic' //绑定元素
    , url: '/uploadFile' //上传接口 [[@{/upload/img}]]
    , auto: false
    , exts: 'doc|docx|pdf|jpg|jpeg|png|zip|'//图片格式
    , bindAction: '#uploadPicBtn'//点击选择图片,会弹出window弹窗
    ,size:50 //文件上传的大小,一定要设置
    , before: function (obj) {
    //预读本地文件示例,不支持ie8
    obj.preview(function (index, file, result) {
    $('#preShow').attr('src', result); //图片链接(base64)
    });
    }
    , done: function (res) {
    //上传失败
    if (res.code > 0) {
    return layer.msg('上传失败');
    }
    //上传成功
    if (res.code == 0) {
    $('#aftershow').attr('src', "/uploadFile/" + res.data);
    document.getElementById("img_url").value = res.data;
    return layer.msg('上传成功');
    }

    }
    , error: function (re) {
    var demoText = $('#demoText');
    demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
    demoText.find('.demo-reload').on('click', function () {
    uploadInst.upload();
    });
    }
    });

  Controller代码

  1. //前端选择图片 传入后端,修改名字保存进数据库
  2. @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
  3. @ResponseBody
  4. public Map uploadPicture(@RequestParam("file") MultipartFile file) {
  5. Map<String, Object> res = new HashMap<>();
  6. File targetFile = null;
  7. //返回存储路径
  8. String url = "";
  9. //获取文件名加后缀
  10. String fileName = file.getOriginalFilename();
  11. if (fileName != null && fileName != "") {
  12. //文件临时存储位置到target路径上,保证上传不用重启就能看到
  13. String path = ClassUtils.getDefaultClassLoader().getResource("static").getPath() + File.separator + "images";
  14.  
  15. //文件后缀
  16. String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
  17. //最后的文件名
  18. fileName = System.currentTimeMillis() + "_" + new Random().nextInt(1000) + fileSuffix;
  19.  
  20. //获取文件夹路径
  21. path = path + File.separator;
  22. File file1 = new File(path);
  23. //如果文件夹不存在则创建
  24. if (!file1.exists() && !file1.isDirectory()) {
  25. file1.mkdirs();
  26. }
  27. //将图片存入文件夹
  28. targetFile = new File(file1, fileName);
  29. try {
  30. //将上传的文件写到服务器上指定的文件。
  31. file.transferTo(targetFile);
  32. //本项目所在位置D:\CRM-Test\code\honda-project-all
  33. String projectPath = System.getProperty("user.dir");
  34. //文件复制
  35. String src = path + fileName;
  36. //web项目实际路径D:\CRM-Test\code\honda-project-all\honda-web\src\main\resources\static\images
  37. String destDir = projectPath + File.separator + "honda-web" + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "static" + File.separator + "images" + File.separator;
  38. //文件上传读取
  39. copyFile(src, destDir, fileName);
  40. //数据库只存名字
  41. url = fileName;
  42. res.put("data", url);
  43. res.put("code", "0");
  44. res.put("msg", "");
  45. return res;
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. return res;
  51. }

  文件上传读取

  1. /**
  2. * 文件复制
  3. *
  4. * @param src
  5. * @param destDir
  6. * @param fileName
  7. * @throws IOException
  8. */
  9. public void copyFile(String src, String destDir, String fileName) throws IOException {
  10. FileInputStream in = new FileInputStream(src);
  11. File fileDir = new File(destDir);
  12. if (!fileDir.isDirectory()) {
  13. fileDir.mkdirs();
  14. }
  15. File file = new File(fileDir, fileName);
  16.  
  17. if (!file.exists()) {
  18. file.createNewFile();
  19. }
  20. FileOutputStream out = new FileOutputStream(file);
  21. int c;
  22. byte buffer[] = new byte[1024];
  23. while ((c = in.read(buffer)) != -1) {
  24. for (int i = 0; i < c; i++) {
  25. out.write(buffer[i]);
  26. }
  27.  
  28. }
  29. in.close();
  30. out.close();
  31. }

  前端点击查看服务器上的图片

  1. <script type="text/html" id="herfFormalUrl">
  2. <a href="{{'http://localhost:8080/static/images/'+d.pictureUrl}}" class="layui-table-link">查看</a>
  3. </script>

  动态表格超链接查看图片

  1.     //图片库表格
  2. var goodtable = table.render({
  3. elem: '#demo'
  4. , url: '/getPicture' //数据接口
  5. , page: true //开启分页
  6. , limit: 10
  7. , limits: [10]
  8. , cols: [
  9. [ //表头
  10. {checkbox: true, fixed: 'left'}
  11. , {field: 'tmPictureId', title: '编号', width: 100, sort: true, fixed: 'left'}
  12. , {field: 'pictureNo', title: '图片编号', width: 120}
  13. , {field: 'pictureName', title: '图片名称', width: 120, sort: true}
  14. , {field: 'proPictureName', title: '图片类型', width: 120}
  15. , {field: 'carseriesNo', title: '车系', width: 120}
  16. , {field: 'featureNo', title: '机种', width: 120, sort: true}
  17. , {field: 'pictureUrl', title: '图片浏览', width: 120, sort: true, templet: '#herfFormalUrl'}//表格中点击查看图片的超链接
  18. , {field: 'createTime', title: '创建时间', width: 180, sort: true}
  19. , {field: 'remark', title: '备注', width: 228, sort: true}
  20. ]
  21. ]
  22. });

layui框架图片上传至服务器的更多相关文章

  1. .net mvc + layui做图片上传(一)

    图片上传和展示是互联网应用中比较常见的一个功能,最近做的一个门户网站项目就有多个需要上传图片的功能模块.关于这部分内容,本来功能不复杂,但后面做起来却还是出现了一些波折.因为缺乏经验,对几种图片上传的 ...

  2. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片

    摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...

  3. MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器

    MVC图片上传.浏览.删除   1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...

  4. php form 图片上传至服务器上

    本文章也是写给自己看的,因为写的很简洁,连判断都没有,只是直接实现了能上传的功能. 前台: <form action="upload.php" method="PO ...

  5. 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,

    一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...

  6. thinkphp5+layui多图片上传

    准备资料 下载layui <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. 根目录97 <input file>标签,把图片上传到服务器(跟增删改查一起实现)

    首先来个简单的html页面: enctype="multipart/form-data" encoding="multipart/form-data" acti ...

  8. laravel框架图片上传

    1.建控制器方法 2.建立路由 绑定控制器方法 3.进行图片上传的配置 修改图片上传的路径 a) config/filesystems.php 修改disks->local->root(图 ...

  9. .Net之Layui多图片上传

    前言: 多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解.对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的up ...

随机推荐

  1. Code Forces 1367A Sorting Parts 题解

    (原题链接:CF传送门) 题目背景(我看不懂英文嘤嘤嘤) Sorting Parts You have an array a of length n. You can exactly once sel ...

  2. JavaScript Number -> String

    六种将Number类型转化为String类型的方法: 方法一:通过+运算符加上一个空字符串: eg:'' + 5 -> '5'      5 + '' -> '5' 方法二:toStrin ...

  3. Python双人五子棋

    这篇文章旨在介绍一个双人的五子棋程序.再次重申,本人不擅长对代码的可读性进行优化,所以可能有些杂乱(在所难免). 先瞅一眼效果图: 请注意,这个棋子--是这么圆润立体!本程序不需任何素材图片,完全用代 ...

  4. C语言学习之我见-strncpy()字符串复制函数(可控制范围)

    strncpy()函数,用于两个字符串值的复制. (1)函数原型 char *strncpy(char * _Dest,const char * _Source,size_t _Count); (2) ...

  5. 经典漏洞-后台备份数据库getshell

    由于接触安全时间不多,一些老的getshell方法不是很清楚.这次碰到了个老站,正好学习了一下. 首先这边是用户名可以猜测出来的,因为输入错误的用户名显示用户名不存在,如果存在的话会显示密码错误. 爆 ...

  6. BUUCTF-RAR

    rar 看提示知道爆破压缩包的题,纯数字4位数拿出ARCHPR爆破即可.

  7. NET架构师的基本职责

    NET架构师的基本职责1 职责 对本公司大健康平台提出技术研究及可行性报告; 结合需求设计高扩展性.高性能.安全.稳定.可靠的技术系统; 可以通过配置实现业务需求的变化,跟踪并研究***并应用于产品; ...

  8. 关于webstorm更换主题

    现在我们前端使用编辑器,只要用习惯就好,不过这里推荐使用webstorm,因为被称为,'js神器'的称号,不是白说的.接下来我们来看下怎么引入主题. 下面有一个网站,这个网站的名字叫 http://w ...

  9. 11.4 Android Studio如何设置代理

    有些网络环境下,Android Studio下载无法下载依赖,这个时候就要配置代理,至于代理的问题,大家要自己解决. 获取代理信息 一般要获取如下信息: 地址:可以是域名和IP 端口: 代理类型:常用 ...

  10. Cf #782 (Div. 2)

    A. Red Versus Blue 题意 共有 n 个连续字符 ,其中有 a 个  R ,b 个 B (a+b=n),问怎么排列使 R 的最大连续个数最小,输出一种可能排列 思路 b 个B可以把a个 ...