模拟app端上传图片
使用插件模块管理模式:
jsp页面:
<sys:fileUpload fieldName="picList" contentId="true" valueList="${picturesList}"></sys:fileUpload>
<form:hidden id="nameImage" path="prePhoto" htmlEscape="false" maxlength="" class="input-large"/>
引入<sys:fileUpload></sys:fileUpload>标签
<%@ taglib prefix="sys" tagdir="/WEB-INF/tags/sys" %>
fileUpload文件内容:
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<%@ attribute name="tag" type="java.lang.String" required="false" description="每个列表的标识,如需求分隔不同的列表页,应传入"%>
<%@ attribute name="fieldName" type="java.lang.String" required="true" description="图片对应的字段名称"%>
<%@ attribute name="valueList" type="java.util.List" required="true" description="图片背景实体"%>
<%@ attribute name="contentId" type="java.lang.Boolean" required="true" description="是否包含id"%>
<c:if test="${empty isLoaded}">
<c:set var="isLoaded" value="" scope="request" />
<link href="${ctxStatic}/fileupload/fileUpload.css" rel="stylesheet" />
<script type="text/javascript" src="${ctxStatic }/fileupload/fileUpload.js"></script>
</c:if>
<script type="text/javascript"> $(function(){ <c:forEach var="picture" varStatus="status" items="${picturesList}">
if('${picture.userPhotos}'!=''){
var a = document.getElementById('${fieldName}[${status.index}]');
onloadChange(a,'${picture.userPhotos}');
}
</c:forEach>
});
</script>
<div class="section">
<div class="article">
<c:forEach items="${valueList}" var="picture" varStatus="status">
<div class="item">
<img class="addImg" onclick="clickImg(this);" src="${picture.urlPath }">
<c:if test="${contentId}">
<input type="hidden" class="itemId" value="${picture.id}" name="${fieldName}[${status.index}].id"/>
<input width="200px;" class="userPhotos" id="userPhotos" type="hidden" value="${picture.userPhotos}" name="${fieldName}[${status.index}].userPhotos"/>
</c:if> <input name="${fieldName}[${status.index}].files" id="${fieldName}[${status.index}]" class="upload_input" onchange="change(this)" type="file" accept="image/*">
<div class="preBlock">
<img class="preview" id="preview" alt="" name="pic" width="" height="">
</div>
<img class="delete" onclick="deleteImg(this)" src="${ctxStatic }/images/delete.png">
</div>
</c:forEach>
<div style="clear: left;"></div>
</div>
</div>
fileUpload.js文件内容
//点击
var clickImg = function(obj){
$(obj).parent().find('.upload_input').click();
}
//删除
var deleteImg = function(obj){
$(obj).parent().find(".userPhotos").val('');
$(obj).parent().find('img.preview').attr("src","");
//IE9以下
$(obj).parent().find('img.preview').css("filter","");
$(obj).hide();
$(obj).parent().find('.addImg').show();
}
//选择图片
function change(file) { //预览
var pic = $(file).parent().find(".preview");
$(file).parent().find(".userPhotos").val(file.value);
//添加按钮
var addImg = $(file).parent().find(".addImg");
//删除按钮
var deleteImg = $(file).parent().find(".delete"); var ext=file.value.substring(file.value.lastIndexOf(".")+).toLowerCase(); // gif在IE浏览器暂时无法显示
if(ext!='png'&&ext!='jpg'&&ext!='jpeg'){
if (ext != '') {
alert("图片的格式必须为png或者jpg或者jpeg格式!");
}
return;
}
//判断IE版本
var isIE = navigator.userAgent.match(/MSIE/)!= null,
isIE6 = navigator.userAgent.match(/MSIE 6.0/)!= null;
isIE10 = navigator.userAgent.match(/MSIE 10.0/)!= null;
if(isIE && !isIE10) {
file.select();
var reallocalpath = document.selection.createRange().text;
// IE6浏览器设置img的src为本地路径可以直接显示图片
if (isIE6) {
pic.attr("src",reallocalpath);
userPhotos.value = reallocalpath;
}else{
// 非IE6版本的IE由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现
pic.css("filter","progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src=\"" + reallocalpath + "\")");
// 设置img的src为base64编码的透明图片 取消显示浏览器默认图片
pic.attr('src','data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
}
addImg.hide();
deleteImg.show();
}else {
html5Reader(file,pic,addImg,deleteImg,userPhotos);
}
} //onload展示图片
function onloadChange(file,src) { //预览
var pic = $(file).parent().find(".preview");
//添加按钮
var addImg = $(file).parent().find(".addImg");
//删除按钮
var deleteImg = $(file).parent().find(".delete"); pic.attr("src",src); addImg.hide();
deleteImg.show();
} //H5渲染
function html5Reader(file,pic,addImg,deleteImg){
debugger;
var file = file.files[];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(e){ pic.attr("src",this.result);
}
addImg.hide();
deleteImg.show();
}
预览:
这个控件是根据后台配置了几张背景图,就只能上传几张图片,根据需求不同应稍加修改:


删除图片标记:

模拟app端上传图片的更多相关文章
- 微擎app端上传图片后删除不了图片
相信在微擎开发的哥们都知道, 微擎在手册方面还是有点坑的,根本不让人活啊.没办法, 开发时, 只能自己看着源码来搞>>>> 好, 不多说了. 现在来看一个坑 ..直接上代码\ ...
- APP端上传图片 - php接口
$base64="iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAbRJREFUSIntlDFPFF ...
- 利用缓存实现APP端与服务器接口交互的Session控制
与传统B/S模式的Web系统不同,移动端APP与服务器之间的接口交互一般是C/S模式,这种情况下如果涉及到用户登录的话,就不能像Web系统那样依赖于Web容器来管理Session了,因为APP每发一次 ...
- springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装
springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...
- python 全栈开发,Day127(app端内容播放,web端的玩具,app通过websocket远程遥控玩具播放内容,玩具管理页面)
昨日内容回顾 1. 小爬爬 内容采集 XMLY 的 儿童频道 requests 2. 登陆 注册 自动登陆 退出 mui.post("请求地址",{数据},function(){} ...
- app端内容播放,web端的玩具,app通过websocket远程遥控玩具播放内容,玩具管理页面
一.app端内容播放 下载代码 https://github.com/987334176/Intelligent_toy/archive/v1.0.zip 注意:由于涉及到版权问题,此附件没有图片和音 ...
- 【转载】Fiddler抓包及模拟服务端
此文章转载公众号‘云测学院'链接:https://mp.weixin.qq.com/s/qXmBDh980nBJ8IchbRGC3Q 及公众号gloryroadtrain 在HTTP接口的测试过程中, ...
- 基于uniapp自定义Navbar+Tabbar组件「兼容H5+小程序+App端Nvue」
uni-app跨端自定义navbar+tabbar组件|沉浸式导航条|仿咸鱼凸起标签栏 在跨端项目开发中,uniapp是个不错的框架.采用vue.js和小程序语法结构,使得入门开发更容易.拥有非常丰富 ...
- web端,app端,小程序端测试差异详解
前置解释:1.单纯从功能测试的层面上来讲的话,APP 测试.web 测试和H5测试在流程和功能测试上是没有区别的2.Web项目或pc项目都是在电脑上进行测试的.常见的PC项目架构有BS架构和CS架构的 ...
随机推荐
- Linq与Lambda,神一般的工作效率
Linq与Lambda,神一般的工作效 通过对linq和lambda的学习,越发感觉linq和lambda的重要性,他们能极大地简化程序,同时提升程序的可读性,大大提升了我们的工作效率,在公司的 ...
- 【学习笔记】AspectJ笔记
AspectJ的概念 是一种静态编译期增强性AOP的实现 在编译过程中修改代码加入相关逻辑,无需程序员动手 AspectJ具体用法 下载安装AspectJ,启动jar文件,安装到JDK目录,添加pat ...
- python 基础 元组()
# 元组 应用场景 # 尽管 Python的列表中可以存储不同类型的数据 # 但是在开发中,更多的应用场景是 # 1.列表存储相同类型的数据 # 2.通过迭代遍历,在循环体内部,针对列表中的每一项元素 ...
- 第12月第26天 swift 下划线
1. The _ is used to define that the parameter is not named If you have multiple _ it states that you ...
- Ubuntu 12.04安装后无法boot
解决方法是: 在选择启动项时, U盘会有两种启动方式: UEFI和非UEFI的. 用非UEFI进入live CD安装系统后无法启动, 用UEFI重装后问题解决.
- [转]CMake cache
CMakeCache.txt 可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数). CMakeLists.txt 中通过 set(... CACHE . ...
- 【干货】Linux内存数据的获取与转存 直捣密码
知识源:Unit 2: Linux/Unix Acquisition 2.1 Linux/Unix Acquistion Memory Acquisition 中的实验demo部分 小白注意,这是网 ...
- python运行execjs解密js
[转]http://www.knowsky.com/1041161.html python 记一次计算qzonetoken经历 之前用python写了个发表说说的爬虫,但最近发现在post数据时返回不 ...
- 【译】在Asp.Net Core 中使用外部登陆(google、微博...)
原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET Core> (本文很长) 摘要:本文主要介绍了使用外部登陆提供程序登陆的 ...
- 三、vue脚手架工具vue-cli的使用
1.vue-cli构建 vue-cli工具构建:https://blog.csdn.net/u013182762/article/details/53021374 npm的镜像替换成淘宝 2.项目运行 ...