layui的图片上传使用
先上效果图。

在用之前呢,你得先更新最新版的layui版本。经验之谈_(:_」∠)_
今天在用的时候,实在是碰到太多的坑,本来是拒绝更新到最新版来着。
首先是layui.js和layui.all.js的问题。这个是什么问题呢!就是layui.js没有upload.render方法
_(:_」∠)_ _(:_」∠)_ _(:_」∠)_
于是就在百度搜索了:“layui.js is not found reder” 有答案说用layui.all.js
然后引用layui.all.js,而layui.all.js有render方法却不会触发<input type=file的上传功能。(吐血一波)( ̄ー ̄)
然后走神了下百度了 “layui.js和layui.all.js的区别” ,然后也不知道怎么回事,反正莫名其妙好了。
好的,那么我就继续往下。上传之后图片不预览出来。这是自己傻逼,被搞懵了,只是一个layuihide样式没删掉,又吐血一波(楼主最近补血嫌血多,多糖铁复合胶囊、生血宁片,你值得拥有)
就这么用了测试几回后.......打开windows的upload功能(其实就是<input type=file>打开的那个弹窗)没用了,回想起来可能是缓存还是怎么滴吧。哎呀,反正也不写废话了,中间的波折也就过了。
好,一个上午就这么没了。
下午上班,更新了最新版后。导入layui.js和 layui/lay/modules/upload.js(我也忘记有没有用了,反正就导了)完美,不会出现上午的问题了。人呐就是这么傻,能简单解决的非得找原因解决。
接下来是编写后台、写样式、js调试、添加删除按钮以及删除功能。layui图片上传是没用删除按钮的,除非是表格式的,不过区别也不大,只是不太好看。
编写传到mvc控制器的后台,emm
public class UploadFileController : MvcControllerBase
{
public ActionResult UploadImg() {
string resultUrl = "";
for (int i = 0; i < Request.Files.Count; i++)
{ resultUrl += Upload(Request.Files[i]);
if (i<Request.Files.Count-1)
{
resultUrl += ",";
}
}
return Success("上传成功", resultUrl);
} private string Upload(HttpPostedFileBase postedFile) {
UploadFiles uf = new UploadFiles();
string filepath = "images\\Goods\\";
string path = GetMapPath(filepath);//UploadFile/images/goods/
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var filelength = postedFile.ContentLength;
string fileExt = GetPostfixStr(postedFile.FileName);
var fileMaxSize = 307200; //300K
var fileName = Guid.NewGuid() + "." + fileExt; //返回的上传后的文件名
string resultUrl = Config.GetValue("ServerIpHost") + "/UploadFile/images/Goods/" + fileName;//存入数据库的链接
if (filelength <= fileMaxSize)
{
byte[] buffer = new byte[filelength];
postedFile.InputStream.Read(buffer, 0, filelength);
postedFile.SaveAs(path + fileName);
}
return resultUrl; }
/// <summary>
/// 获取文件格式名
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
private string GetPostfixStr(string filename)
{
int start = filename.LastIndexOf(".");
int length = filename.Length;
string postfix = filename.Substring(start + 1);
return postfix;
}
public string GetMapPath(string strPath)
{
if (System.Web.HttpContext.Current != null)
{
return System.Web.HttpContext.Current.Server.MapPath(strPath);
}
else //非web程序引用
{
strPath = strPath.Replace("/", "\\");
if (strPath.StartsWith("\\"))
{
strPath = strPath.Substring(strPath.IndexOf('\\', 1)).TrimStart('\\');
}
return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
}
}
}
写了两个图片上传,一个是多图,一个是单图
layui.use(['form', 'upload', 'element'], function () {
var form = layui.form
, layer = layui.layer;
var upload = layui.upload;
var element = layui.element;
var $ = layui.jquery;
//拖拽上传
var uploadMain = upload.render({
elem: '#test10'
, url: '/UploadFile/UploadImg' //改成您自己的上传接口
//, before: function (obj) {//上传前触发
// //预读本地文件示例,不支持ie8
// obj.preview(function (index, file, result) {
// layui.$('#uploadDemoView').removeClass('layui-hide').find('img').attr('src', result);
// //$('#demo2').attr('src', result); //图片链接(base64)
// });
//}
, choose: function (obj) {//选择后触发
var files = this.files = obj.pushFile();
var view = layui.$('#uploadDemoView');
//预读本地文件示例,不支持ie8
obj.preview(function (index, file, result) {
var _html = $(['<div class="divimg" style="float:left;">'
, '<img style="max-width: 196px;max-height:200px" id="viewImg' + index + '" alt="上传成功后渲染" src="' + result + '">'
, '<div class="divX" >'
, '<img src = "/Content/images/ui_close.png" width = "20" height = "20" />'
, '</div>'
, '</div>'].join(''));
_html.find(".divX").on('click', function () {
delete files[index]; //删除对应的文件
_html.remove();
uploadDetail.config.elem.next()[0].value = '';
})
layui.$('#uploadDemoView').removeClass('layui-hide');
view.removeClass('layui-hide');
_html.find(".divX").on('click', function () {
delete files[index]; //删除对应的文件
_html.remove();
uploadDetail.config.elem.next()[0].value = '';
})
view.append(_html);
});
}
, auto: false//false将不触发before
//, bindAction: "#uploadBtn"
, size: 300//单位kb
, done: function (data) {
if (data.message != "") {
layer.msg(data.message);
}
if (data.type == 1) {
var fileUrl = data.resultdata;
$("input[name='mainPic']").val(fileUrl);
}
else if (data.type == 3) {
return false;
}
}
, progress: function (n, elem) {
var percent = n + '%' //获取进度百分比
element.progress('lodingdemo', percent); //可配合 layui 进度条元素使用
}
});
var uploadDetail;
//拖拽上传
uploadDetail = upload.render({
elem: '#upDiv2'
, url: '/UploadFile/UploadImg' //改成您自己的上传接口
, choose: function (obj) {//选择图片后触发
var files = this.files = obj.pushFile();//每次会把新图片加入集合
//-----------------图片数量限制
var filecount = Object.getOwnPropertyNames(files).length;//这里就不说,做图片数量限制
if (filecount > 4) {
layer.msg("只能上传4张");
var fileobj = Object.getOwnPropertyNames(files)//
$(fileobj).each(function (i, j) {//删除本次添加的图片,不删的话
if (i > 3) {
delete files[j];
}
})
return false;
}
//----------------------------
var view2 = layui.$('#uploadDemoView2');
//预读本地文件示例
obj.preview(function (index, file, result) {
var _html = $(['<div class="divimg" style="float:left;">'
, '<img style="max-width: 196px;max-height:200px" id="viewImg' + index + '" alt="上传成功后渲染" src="' + result + '">'
, '<div class="divX" >'
, '<img src = "/Content/images/ui_close.png" width = "20" height = "20" />'
, '</div>'
, '</div>'].join(''));
view2.removeClass('layui-hide');
_html.find(".divX").on('click', function () {
debugger;
delete files[index]; //删除对应的文件
_html.remove();
uploadDetail.config.elem.next()[0].value = '';
})
view2.append(_html);
});
}
, multiple: true
// , number: 4//这个是限制一次性选择4张图片 反正就不能用,没卵用
, auto: false//false将不触发before
, size: 300//单位kb
, done: function (data) {
if (data.message != "") {
layer.msg(data.message);
}
if (data.type == 1) {
var fileUrl = data.resultdata;
$("input[name='detailPic']").val(fileUrl);
}
else if (data.type == 3) {
return false;
}
}
//, error: function (index, upload) {
// //当上传失败时,你可以生成一个“重新上传”的按钮,点击该按钮时,执行 upload() 方法即可实现重新上传
//}
, progress: function (n, elem) {
var percent = n + '%' //获取进度百分比
element.progress('lodingdemo2', percent); //可配合 layui 进度条元素使用
}
});
$("#uploadBtn").click(function () {
uploadMain.upload();
uploadDetail.upload();
return false;
})
//自定义验证规则
//监听提交
//表单取值
});
<style type="text/css">
.divX {
position: absolute;
top: 0px;
right: 0px;
text-align: right;
padding-right: 3px;
z-index: 200;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
line-height: 10px;
font-weight: bold;
cursor: pointer;
font-size: 10px;
} .divimg {
max-height: 220px;
height: 220px;
width: 258px;
max-width: 258px;
background-color: #fff;
border: 1px dashed #e6e6e6;
position: relative;
text-align: center;
} .divimg > img {
padding-top: 10px;
}
</style>
<form class="layui-form layui-form-pane" lay-filter="example">
<input type="hidden" name="mainPic" />
<input type="hidden" name="detailPic" /> <div class="layui-form-item">
<button class="layui-btn layui-btn-normal layui-btn-radius" id="uploadBtn" lay-submit="">开始上传</button>
</div>
<div class="layui-form-item">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>上传主图(300kb内)</legend>
</fieldset> <div class="layui-upload-drag" id="test10">
<div class="layui-progress" lay-filter="lodingdemo" lay-showpercent="true">
<div class="layui-progress-bar" lay-percent="0%"></div>
</div>
<i class="layui-icon"></i>
<p>点击上传,或将文件拖拽到此处</p>
<hr /> </div>
<div class="layui-hide" id="uploadDemoView">
@*<img style="max-width: 196px;max-height:200px" id="demo2" alt="上传成功后渲染" lay-filter="imgfilter" src="">
<div class="divX " onclick="del(this)">
<img src="~/Content/images/ui_close.png" width="20" height="20" />
</div>*@
</div>
</div>
<div class="layui-form-item">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>上传详情页(300kb内,最多4张)</legend>
</fieldset> <div class="layui-upload-drag" id="upDiv2">
<div class="layui-progress" lay-filter="lodingdemo2" lay-showpercent="true">
<div class="layui-progress-bar" lay-percent="0%"></div>
</div>
<i class="layui-icon"></i>
<p>点击上传,或将文件拖拽到此处</p>
<hr>
</div>
<div class="layui-hide" id="uploadDemoView2">
</div>
</div>
</form>
layui的图片上传使用的更多相关文章
- .net mvc + layui做图片上传(二)—— 使用流上传和下载图片
摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...
- .net mvc + layui做图片上传(一)
图片上传和展示是互联网应用中比较常见的一个功能,最近做的一个门户网站项目就有多个需要上传图片的功能模块.关于这部分内容,本来功能不复杂,但后面做起来却还是出现了一些波折.因为缺乏经验,对几种图片上传的 ...
- .Net之Layui多图片上传
前言: 多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解.对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的up ...
- thinkphp5+layui多图片上传
准备资料 下载layui <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- php+layui实现图片上传与预览
端代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...
- layui 实现图片上传和预览
[学习笔记] 图片不自动上传并在表单提交时再上传,看代码. 附上表单页面 前台实现 <#--图片名--><input id="fileName" type=&qu ...
- layui实现图片上传
页面代码: <style> .uploadImgBtn2{ width: 120px; height: 92px; cursor: pointer; position: relative; ...
- layui框架图片上传至服务器
注意:只可用于数据量较小的项目,数据量庞大的项目不要用这个,否则会造成图片数量庞大,至服务器运行速度变慢或瘫痪 HTML代码 //前端使用的是layui框架<div class="la ...
- ThinkPHP5+Layui实现图片上传加预览
html代码 <div class="layui-upload"> <button type="button" class="lay ...
- layui 富文本 图片上传 后端PHP接口
<!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/ ...
随机推荐
- Sentinel 源码分析- 熔断降级原理分析
直接从Sentinel 源码demo ExceptionRatioCircuitBreakerDemo看起 直接看他的main函数 public static void main(String[] a ...
- MySQL到底有没有解决幻读问题?这篇文章彻底给你解答
MySQL InnoDB引擎在Repeatable Read(可重复读)隔离级别下,到底有没有解决幻读的问题? 网上众说纷纭,有的说解决了,有的说没解决,甚至有些大v的意见都无法达成统一. 今天就深入 ...
- 2022第五空间-web部分wp+复盘总结
打了一天,麻了,大佬tql,这次get到了不少东西,一是一个不太常见的宽字节注入,我是真的没想到,而且后面也是看了wp理解了好一会才弄明白. 0x01: 题目是一个登录框,但是基本上是过滤掉了所有的常 ...
- kvm使用桥接的方法
什么是桥接 桥接就是把物理机的网卡模拟成交换机,虚拟机的网卡直接连在虚拟的网桥即交换机上.这样kvm虚拟机分配的IP地址,就应该和物理机在同一网段,可以对外进行服务. 在KVM下运行的VM默认的网卡采 ...
- Beats processors
文章转载自:https://elasticstack.blog.csdn.net/article/details/111321105 我们通常的做法是使用 Elasticsearch 的 ingest ...
- C++自学笔记 初始化列表 Initializer list
初始化p A(){ p = 0;cout<<"A::A()"<<endl;} 初始化列表 Initializer list A():p(0){ cout&l ...
- python实验报告(第五周)
一.实验目的和要求 学会使用字符串的常用操作方法和正确应用正则表达式. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:使用字符串拼接输出一个关于程序员的笑话 ...
- Android类加载流程
背景 由于前前前阵子写了个壳,得去了解类的加载流程,当时记了一些潦草的笔记.这几天把这些东西简单梳理了一下,本文分析的代码基于Android8.1.0源码. 流程分析 从loadClass开始,我们来 ...
- 代码随想录第七天| 454.四数相加II、383. 赎金信 、15. 三数之和 、18. 四数之和
第一题454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, ...
- Linx__Ubuntu_APT
apt介绍 apt是Advanced Packaging Tool的简称. 在Ubuntu下,我们可以使用apt命令进行软件包的更新,安装,删除,清理等 类似于Windows的软件管理工具. 就是Ce ...