热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图片上传预览及上传后台

用纯js实现图片在线预览功能,并增加提交后台代码,实现多个图片多次请求上传,具体使用再进行修改即可,需要引入jquery、layer、ajaxfileupload相关js文件,在非IE浏览器中可

用纯js实现图片在线预览功能,并增加提交后台代码,实现多个图片多次请求上传,具体使用再进行修改即可,需要引入jquery、layer、ajaxfileupload相关js文件,在非IE浏览器中可以实现点击图片展示大图的功能,IE浏览器下只可以预览,没有绑定点击事件。
一、html代码:


<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>原生JS实现图片上传预览效果完美兼容各浏览器title>
<script type="text/Javascript" src="jquery.min.js">script>
<script type="text/Javascript" src="ajaxfileupload.js">script>
<script type="text/Javascript" src="layer/layer.js">script>
<script type="text/Javascript" src="viewImage.js">script>
<link rel="stylesheet" type="text/css" href="viewImage.css">
head>
<body>
<table>
<tr>
<td style="width:100px">选择图片:td>
<td>
<a href="Javascript:void(0)" class="file" style="float:left;margin-right:10px">选择文件
<input class="file" type="file" name="filePath" id="preFilePath" required="true" onchange="loadImageFile(this,3)"/>
a>
<a href="Javascript:void(0)" class="file">清空图片
<input class="file" type="button" onclick="clearImages('preFilePath')"/>
a>
td>
tr>
table>
<table>
<tr>
<td style="width:100px">图片预览:td>
<td style="height:200px">
<ul id="preFilePathView" class="imgShow">
ul>
td>
tr>
table>
<a href="Javascript:void(0)" class="file">提交
<input id="submitImg" class="file" type="button"/>
a>
body>
<script type="text/Javascript">
$(document).ready(function(){
//重置上传图片内容
formDataJson={};
//清除图片相关信息
clearImages('preFilePath');
//提交方法路径
var uploadUrl='rest/xxx/xxx';
$('#submitImg').click(function(){
submitFiles(uploadUrl,{},function(){
alert('提交成功!')
});
})
})
script>
html>

二、js代码:

/**
* 注意事项:
* 图片预览方法调用,id为当前上传图片的input控件id,预览图片的ul的id要写成id+View
* 需要调用css样式file与imgShow,需引用viewImages.css文件
* 在打开dialog的时候需要清空所有图片相关信息,并重置imagesFiles={}
* 支持在火狐、谷歌下点击图片显示大图,IE下只支持在线预览、不支持点击图片显示大图
* @author:LX
* @time 2017-08-01 09:40:20
*/

////实例:
////选择图片按钮
//
//
//
//
//
//
选择图片:
// 选择文件
//
//

// 清空图片
//
//

//

////图片预览:
//
//
//
//
//
//
图片预览:
//

    //

//

var imageFiles = {};
//用于显示大图
var imgDatas = {};
//存放图片信息
var formDataJson = {};
var uploadFileID;
var tempNum= 0;
var loadImageFile = (function(uploadFile, num) {
if (window.FileReader) {
var oPreviewImg = null,
oFReader = new window.FileReader(),
rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;
return function(uploadFile, num) {
uploadFileID = uploadFile.id;
var imgData = imgDatas[uploadFileID];
if (imgData == undefined) {
imgData = [];
}
var tempArr = formDataJson[uploadFileID];
if (tempArr != undefined && tempArr.length >= num) {
alert('最多上传' + num + '张图片');
return;
}
if (tempArr == undefined) {
tempArr = [];
}
oFReader.Onload= function(oFREvent) {
var newPreview = document.getElementById(uploadFileID + "View");
var node = document.createElement("LI");
node.className = 'imgLi';
newPreview.appendChild(node);
oPreviewImg = new Image();
$(oPreviewImg).click(function (){
showBigImg(this);
});
oPreviewImg.style.width = "200px";
oPreviewImg.style.height = "200px";
node.appendChild(oPreviewImg);
oPreviewImg.src = oFREvent.target.result;
var tempJson = {};
tempJson['alt'] = '大图';
tempJson['pid'] = oFREvent.target.result;
tempJson['src'] = oFREvent.target.result;
tempJson['thumb'] = '';
imgData.push(tempJson);
imgDatas[uploadFileID] = imgData;
};

var aFiles = document.getElementById(uploadFileID).files;
if (aFiles.length === 0) {
return;
}
if (!rFilter.test(aFiles[0].type)) {
alert("请上传图片类型文件!");
return;
}
oFReader.readAsDataURL(aFiles[0]);
tempArr.push(uploadFile);
formDataJson[uploadFileID] = tempArr;
creatInput(uploadFile);
}
}
if (navigator.appName === "Microsoft Internet Explorer") {
return function(uploadFile, num) {
uploadFileID = uploadFile.id;
var tempArray = formDataJson[uploadFileID];
if (tempArray != undefined && tempArray.length >= num) {
alert('最多上传' + num + '张图片!');
return;
}
if (tempArray == undefined) {
tempArray = [];
}
var extArray = new Array(".gif", ".jpg", ".bmp", ".png", ".jpeg");
var file = document.getElementById(uploadFileID).value;
var file1 = file.slice(file.indexOf("\\") + 1);
var ext = file1.slice(file1.indexOf(".")).toLowerCase();
var allowSubmit = false;
for (var i = 0; i if (extArray[i] == ext) {
allowSubmit = true;
break;
}
}
if (!allowSubmit) {
alert("请上传图片类型文件!");
return;
}
var node = document.createElement("LI");
node.className = 'imgLi';
document.getElementById(uploadFileID + 'View').appendChild(node);
node.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = file;
tempArray.push(uploadFile);
formDataJson[uploadFileID] = tempArray;
creatInput(uploadFile);
}
}
})();
//隐藏input创建新input
function creatInput(uploadFile) {
tempNum++;
$(uploadFile).hide();
var tempId = uploadFile.id;
$(uploadFile).attr('id', "temp" + tempNum);
var inputTemp = document.createElement("INPUT");
inputTemp.type = 'file';
inputTemp.name = 'filePath';
inputTemp.id = tempId;
$(inputTemp).addClass('file');
$(uploadFile).parent()[0].appendChild(inputTemp);
if ($(inputTemp)[0].Onchange== null) {
$(inputTemp).on('change',
function() {
loadImageFile($(inputTemp)[0], 3);
});
}
}
//图片提交方法
function submitFiles(url, data, func) {
var loadingPross = layer.msg('提交中……', {
icon: 16,
shade: 0.01,
time: 0 //1000*60*60*24 //2秒关闭(如果不配置,默认是3秒)
});
for (var fileInputId in formDataJson) {
var formDataList = formDataJson[fileInputId];
for (var i = 0; i var input = formDataList[i];//获取到图片文件
$.ajaxFileUpload({
url: url,
secureuri: false,
data: data,
fileElementId: input.id,
dataType: 'JSON',
success: function(result) {
var resultData = $.parseJSON(result);
if (resultData.success) {
if (func != undefined && func != '') {
func();
}
} else {
alert("上传失败");
}
},
error: function(result) {
alert("上传失败");
},
complete: function(XMLHttpRequest, textStatus) {
layer.close(loadingPross);
}
});
}
}
}
//删除所有图片
function clearImages(id) {
var bigImgArr = imgDatas[id];
if (bigImgArr != undefined && bigImgArr.length > 0) {
bigImgArr.splice(0, bigImgArr.length);
}
var formDataList = formDataJson[id];
if (formDataList != undefined && formDataList.length > 0) {
formDataList.splice(0, formDataList.length);
}
$('#' + id + 'View').off('click', 'li');
$('#'+id+'View').html('');
}
//显示大图
function showBigImg(file) {
var viewId=$(file).parents()[1].id;
var viewIndex=viewId.indexOf("View");
var id=viewId.substring(0,viewIndex);
var imgData = imgDatas[id];
var json = {
"title": "大图展示",
//相册标题
"id": id,
//相册id
"start": 0,
//初始显示的图片序号,默认0
"data": imgData
};
layer.photos({
photos: json,
//格式见API文档手册页
anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机
});
}

三、css代码:

@CHARSET "UTF-8";
.imgShow{
list-style:none;
}

.imgShow li{
margin-left:5px;
width: 200px;
height: 200px;
float: left;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
border:1px solid #a9c9e2;
background:#e8f5fe;
}

.file {
position: relative;
background: #D0EEFF;
border: 1px solid #99D3F5;
border-radius: 4px;
padding: 4px 12px;
overflow: hidden;
color: #1E88C7;
text-decoration: none;
text-indent: 0;
line-height: 20px; display:block;
width:100px;
text-align:center;
}

.file input {
position: absolute;
font-size: 100px;
right: 0;
top: 0;
opacity: 0;
width:130px;
height:30px;
background-color:#D0EEFF opacity:0.5;
filter:alpha(opacity=-250);
}

.file:hover {
background: #AADFFD;
border-color: #78C3F3;
color: #004974;
text-decoration: none;
}
​

四、效果图:

IE下效果:
IE下预览
火狐下效果:
火狐下预览
浏览器中都可以正确的现实图片
五、点击提交按钮进行图片提交,多张图片通过循环调用ajaxfileupload多次访问后台进行图片提交。①java代码中正常按照ajaxfileupload方式去接受即可。②注意接收图片文件的文件域为file控件的name属性值filePath。③因参数为表单方式提交,所以java中必须使用request.getParameter(“xx”)方式获取上传的参数。
附文章中源码地址:http://download.csdn.net/download/lxacdf/9932475
如果文章中有不正确的地方,欢迎大家指正!


推荐阅读
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • fileuploadJS@sectionscripts{<scriptsrc~Contentjsfileuploadvendorjquery.ui.widget.js ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了一道网络流题目hdu4888 Redraw Beautiful Drawings的解题思路。题目要求以行和列作为结点建图,并通过最大流算法判断是否有解以及是否唯一。文章详细介绍了建图和算法的过程,并强调在dfs过程中要进行回溯。 ... [详细]
author-avatar
手机用户随便转转
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有