layui框架图片上传至服务器
注意:只可用于数据量较小的项目,数据量庞大的项目不要用这个,否则会造成图片数量庞大,至服务器运行速度变慢或瘫痪
HTML代码
- //前端使用的是layui框架
<div class="layui-form-item">- <div class="layui-input-block">
- <!-- 上传按钮 -->
- <button type="button" class="layui-btn" id="uploadPic"><i class="layui-icon"></i>选择图片</button>
- <button type="button" class="layui-btn layui-btn-warm" id="uploadPicBtn">开始上传</button>
- <!-- 隐藏的input,一个隐藏的input(用于保存文件url) -->
- <input type="hidden" id="img_url" name="img" value=""/>
- <!-- 预览区域 -->
- <div class="layui-upload-list">
- <img class="layui-upload-img" width="100px" height="80px" id="preShow"/>
- <p id="demoText"></p>
- </div>
- </div>
- </div>
JS代码
- //上传图片
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代码
- //前端选择图片 传入后端,修改名字保存进数据库
- @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
- @ResponseBody
- public Map uploadPicture(@RequestParam("file") MultipartFile file) {
- Map<String, Object> res = new HashMap<>();
- File targetFile = null;
- //返回存储路径
- String url = "";
- //获取文件名加后缀
- String fileName = file.getOriginalFilename();
- if (fileName != null && fileName != "") {
- //文件临时存储位置到target路径上,保证上传不用重启就能看到
- String path = ClassUtils.getDefaultClassLoader().getResource("static").getPath() + File.separator + "images";
- //文件后缀
- String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
- //最后的文件名
- fileName = System.currentTimeMillis() + "_" + new Random().nextInt(1000) + fileSuffix;
- //获取文件夹路径
- path = path + File.separator;
- File file1 = new File(path);
- //如果文件夹不存在则创建
- if (!file1.exists() && !file1.isDirectory()) {
- file1.mkdirs();
- }
- //将图片存入文件夹
- targetFile = new File(file1, fileName);
- try {
- //将上传的文件写到服务器上指定的文件。
- file.transferTo(targetFile);
- //本项目所在位置D:\CRM-Test\code\honda-project-all
- String projectPath = System.getProperty("user.dir");
- //文件复制
- String src = path + fileName;
- //web项目实际路径D:\CRM-Test\code\honda-project-all\honda-web\src\main\resources\static\images
- String destDir = projectPath + File.separator + "honda-web" + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "static" + File.separator + "images" + File.separator;
- //文件上传读取
- copyFile(src, destDir, fileName);
- //数据库只存名字
- url = fileName;
- res.put("data", url);
- res.put("code", "0");
- res.put("msg", "");
- return res;
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return res;
- }
文件上传读取
- /**
- * 文件复制
- *
- * @param src
- * @param destDir
- * @param fileName
- * @throws IOException
- */
- public void copyFile(String src, String destDir, String fileName) throws IOException {
- FileInputStream in = new FileInputStream(src);
- File fileDir = new File(destDir);
- if (!fileDir.isDirectory()) {
- fileDir.mkdirs();
- }
- File file = new File(fileDir, fileName);
- if (!file.exists()) {
- file.createNewFile();
- }
- FileOutputStream out = new FileOutputStream(file);
- int c;
- byte buffer[] = new byte[1024];
- while ((c = in.read(buffer)) != -1) {
- for (int i = 0; i < c; i++) {
- out.write(buffer[i]);
- }
- }
- in.close();
- out.close();
- }
前端点击查看服务器上的图片
- <script type="text/html" id="herfFormalUrl">
- <a href="{{'http://localhost:8080/static/images/'+d.pictureUrl}}" class="layui-table-link">查看</a>
- </script>
动态表格超链接查看图片
- //图片库表格
- var goodtable = table.render({
- elem: '#demo'
- , url: '/getPicture' //数据接口
- , page: true //开启分页
- , limit: 10
- , limits: [10]
- , cols: [
- [ //表头
- {checkbox: true, fixed: 'left'}
- , {field: 'tmPictureId', title: '编号', width: 100, sort: true, fixed: 'left'}
- , {field: 'pictureNo', title: '图片编号', width: 120}
- , {field: 'pictureName', title: '图片名称', width: 120, sort: true}
- , {field: 'proPictureName', title: '图片类型', width: 120}
- , {field: 'carseriesNo', title: '车系', width: 120}
- , {field: 'featureNo', title: '机种', width: 120, sort: true}
- , {field: 'pictureUrl', title: '图片浏览', width: 120, sort: true, templet: '#herfFormalUrl'}//表格中点击查看图片的超链接
- , {field: 'createTime', title: '创建时间', width: 180, sort: true}
- , {field: 'remark', title: '备注', width: 228, sort: true}
- ]
- ]
- });
layui框架图片上传至服务器的更多相关文章
- .net mvc + layui做图片上传(一)
图片上传和展示是互联网应用中比较常见的一个功能,最近做的一个门户网站项目就有多个需要上传图片的功能模块.关于这部分内容,本来功能不复杂,但后面做起来却还是出现了一些波折.因为缺乏经验,对几种图片上传的 ...
- .net mvc + layui做图片上传(二)—— 使用流上传和下载图片
摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...
- MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器
MVC图片上传.浏览.删除 1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...
- php form 图片上传至服务器上
本文章也是写给自己看的,因为写的很简洁,连判断都没有,只是直接实现了能上传的功能. 前台: <form action="upload.php" method="PO ...
- 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...
- thinkphp5+layui多图片上传
准备资料 下载layui <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 根目录97 <input file>标签,把图片上传到服务器(跟增删改查一起实现)
首先来个简单的html页面: enctype="multipart/form-data" encoding="multipart/form-data" acti ...
- laravel框架图片上传
1.建控制器方法 2.建立路由 绑定控制器方法 3.进行图片上传的配置 修改图片上传的路径 a) config/filesystems.php 修改disks->local->root(图 ...
- .Net之Layui多图片上传
前言: 多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解.对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的up ...
随机推荐
- Code Forces 1367A Sorting Parts 题解
(原题链接:CF传送门) 题目背景(我看不懂英文嘤嘤嘤) Sorting Parts You have an array a of length n. You can exactly once sel ...
- JavaScript Number -> String
六种将Number类型转化为String类型的方法: 方法一:通过+运算符加上一个空字符串: eg:'' + 5 -> '5' 5 + '' -> '5' 方法二:toStrin ...
- Python双人五子棋
这篇文章旨在介绍一个双人的五子棋程序.再次重申,本人不擅长对代码的可读性进行优化,所以可能有些杂乱(在所难免). 先瞅一眼效果图: 请注意,这个棋子--是这么圆润立体!本程序不需任何素材图片,完全用代 ...
- C语言学习之我见-strncpy()字符串复制函数(可控制范围)
strncpy()函数,用于两个字符串值的复制. (1)函数原型 char *strncpy(char * _Dest,const char * _Source,size_t _Count); (2) ...
- 经典漏洞-后台备份数据库getshell
由于接触安全时间不多,一些老的getshell方法不是很清楚.这次碰到了个老站,正好学习了一下. 首先这边是用户名可以猜测出来的,因为输入错误的用户名显示用户名不存在,如果存在的话会显示密码错误. 爆 ...
- BUUCTF-RAR
rar 看提示知道爆破压缩包的题,纯数字4位数拿出ARCHPR爆破即可.
- NET架构师的基本职责
NET架构师的基本职责1 职责 对本公司大健康平台提出技术研究及可行性报告; 结合需求设计高扩展性.高性能.安全.稳定.可靠的技术系统; 可以通过配置实现业务需求的变化,跟踪并研究***并应用于产品; ...
- 关于webstorm更换主题
现在我们前端使用编辑器,只要用习惯就好,不过这里推荐使用webstorm,因为被称为,'js神器'的称号,不是白说的.接下来我们来看下怎么引入主题. 下面有一个网站,这个网站的名字叫 http://w ...
- 11.4 Android Studio如何设置代理
有些网络环境下,Android Studio下载无法下载依赖,这个时候就要配置代理,至于代理的问题,大家要自己解决. 获取代理信息 一般要获取如下信息: 地址:可以是域名和IP 端口: 代理类型:常用 ...
- Cf #782 (Div. 2)
A. Red Versus Blue 题意 共有 n 个连续字符 ,其中有 a 个 R ,b 个 B (a+b=n),问怎么排列使 R 的最大连续个数最小,输出一种可能排列 思路 b 个B可以把a个 ...