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/ ...
随机推荐
- Order Siblings by 排序
在层次查询中,如果想让"亲兄弟"按规矩进行升序排序就需要使用ORDER SIBLINGS BY 这个特定的排序语句,若要降序输出可以在其后添加DESC关键字. 通过这个实验给大家展 ...
- Gitea 1.17.1 正式发布 | 08 累积更新
Gitea 1.17.1 已正式发布.在这个小的版本更新中我们合并了 35 个 PR,没有包含功能性的更改,但我们强烈建议用户升级到此版本以获得重要的修复补丁. 致谢:感谢报告问题的安全研究人员,同时 ...
- 【开源打印组件】vue-plugin-hiprint初体验
vue-plugin-hiprint的学习与应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习 ...
- 学会Linux,看完这篇就行了!
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/797ab07d.html 你好,我是测试蔡坨坨. 对于测试同学来说,Linux基本属于必学必会内容,招聘要求中基本都会出现L ...
- 大家都在用MySQL count(*)统计总数,到底有什么问题?
在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数.统计用户总数等.一般我们会使用MySQL 的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询 ...
- 第五章:Admin管理后台 - 1:自定制Admin
如果只是在admin中简单的展示及管理模型,那么在admin.py模块中使用admin.site.register将模型注册一下就好了: from django.contrib import admi ...
- 利用python对websocket进行并发压测
简述 产品经理鉴于运营反馈并对程序的websocket长连接保持怀疑的态度,让我对websocket服务器进行压力测试,我内心是拒绝的. 开发思路 查阅websocket的相关资料,查到python的 ...
- java基础二、类与继承
员工类 Employee, 经理类:Manager public class Employee { private String name; private double salary; privat ...
- Node.js(一)基本node.js读取删除
npm init -y(初始化项目) npm uninstall (xxx模块名称)=>(移除模块) var text2=require("./text2"); //解构 c ...
- 关于使用AWS上的RHEL-8.x/Redhat系统使用自己单独购买的Redhat官网license导致的yum命令报错处理
我们在aws上使用市场提供的RHEL-8.x系统后,license相关的都是由aws官网一起提供了 最近笔者将aws上一台作过系统加固的RHEL-8.x导出到自己本地DC环境,也注册了Redhat官网 ...