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

  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框架图片上传至服务器的更多相关文章

  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. drools执行完某个规则后终止别的规则执行

    目录 1.背景 2.需求 3.实现方案 1.通过Fact判断 2.通过全局变量判断 3.通过halt方法 4.实现上述需求 4.1 drl 文件编写 4.2 运行结果 5.完整代码 1.背景 在我们开 ...

  2. Go微服务框架go-kratos实战03:使用 gorm 实现增删改查操作

    一.简介 在上一篇文章 go-kratos实战02 中,详细介绍了用 kratos 编写项目代码的步骤.这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作. ...

  3. CentOS切换用户命令su or su+username

    1.打开终端,提示符为"$",表明该用户为普通用户,此时,直接输su,回车,输入root密码,回车,就可以切换到root用户下,此时的提示符变为"#". 注意, ...

  4. conda install和pip install区别

    conda ≈ pip(python包管理) + virtualenv(虚拟环境) + 非python依赖包管理 级别不一样conda和yum比较类似,可以安装很多库,不限于Python.conda是 ...

  5. Linux Cgroup v1(中文翻译)(4):Block IO Controller

    Block IO Controller 1 概览 cgroup子系统blkio实现了block io控制器.无论是对存储结构上的叶子节点和还是中间节点,它对各种IO控制策略(proportional ...

  6. 【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?

    问题描述 因为中国区的App Service对外(公网访问)需要进行ICP备案,所以很多情况下,Web应用部署到App Service后,都是通过Application Gateway(应用程序网关) ...

  7. SAP Web Dynpro-监视应用程序

    您可以使用ABAP监视器来监视Web Dynpro应用程序. 存储有关Web Dynpro应用程序的信息. 您可以使用T代码-RZ20查看此信息. 您可以在Web Dynpro ABAP监视器中查看以 ...

  8. CMU15445 之 Project#0 - C++ Primer 详解

    前言 这个实验主要用来测试大家对现代 C++ 的掌握程度,实验要求如下: 简单翻译一下上述要求,就是我们需要实现定义在 src/include/primer/p0_starter.h 中的三个类 Ma ...

  9. 【python基础】第06回 运算符和流程控制 1

    本章内容概要 1.运算符 2.流程控制 本章内容详解 1.运算符 什么是运算符? 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是" ...

  10. python小题目练习(十一)

    题目:大乐透号码生成器 需求:使用Random模块模拟大乐透号码生成器,选号规则为:前区在1 ~ 35的范围内随机产生不重复 的5个号码,后区在1~ 12的范围内随机产生不重复的2个号码.效果如图8. ...