js实现图片上传预览(一张一张上传)

下面例子最多上传六张图片,可以修改参数。在IE8和谷歌测试可用。


html代码

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
		<script type="text/javascript" src="js/index.js"></script>
		<link rel="stylesheet" href="css/index.css" />
	</head>

	<body>
		<div class="picture01">
			
			<div class="picDiv lastestPic">
				<div class="localImg" id="localImg">
					<img class="preview" id="preview" src="img/coverphoto.png" />
				</div>
				<div class="uploadBtn">
					<input type="file" class="fileBtn" name="file" id="doc" οnchange="uploadPic(this);">
				</div>
				<div class="btnLine">
					<div class="btnDiv" style="box-sizing: border-box;border-right: 1px solid #fff;">
						<div class="btnWords" >预览</div>
					</div>
					<div class="btnDiv">
						<div class="btnWords">设为主图</div>
					</div>
				</div>
				<div class="delDiv">
					<img class="delBtn" src="img/del.png""/>
				</div>
			</div>
			
			
		</div>

	</body>

</html>

js

//下面用于图片上传预览功能
function setImagePreview(docObj) {
	var imgObjPreview = docObj.parentNode.parentNode.children[0].children[0];
	if(docObj.files && docObj.files[0]) {
		//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
		imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
	} else {
		//IE下,使用滤镜
		docObj.select();
		var imgSrc = document.selection.createRange().text;
		var localImagId = docObj.parentNode.parentNode.children[0];
		//图片异常的捕捉,防止用户修改后缀来伪造图片
		try {
			localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
			localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
		} catch(e) {
			alert("您上传的图片格式不正确,请重新选择!");
			return false;
		}
		imgObjPreview.style.display = 'none';
		document.selection.empty();
	}
	return true;
}

function uploadPic(obj) {
	var isSuccess = setImagePreview(obj);
	var html = '<div class="picDiv lastestPic">' +
		'<div class="localImg" id="localImg">' +
		'<img class="preview" id="preview" src="img/coverphoto.png" />' +
		'</div>' +
		'<div class="uploadBtn">' +
		'<input type="file" class="fileBtn" name="file" id="doc" οnchange="uploadPic(this);">' +
		'</div>' +
		'<div class="btnLine">' +
		'<div class="btnDiv" style="box-sizing: border-box;border-right: 1px solid #fff;">' +
		'<div class="btnWords" >预览</div>' +
		'</div>' +
		'<div class="btnDiv">' +
		'<div class="btnWords">设为主图</div>' +
		'</div>' +
		'</div>' +
		'<div class="delDiv">' +
		'<img class="delBtn" src="img/del.png""/>' +
		'</div>' +
		'</div>';
	var isLast = obj.parentNode.parentNode.classList.contains('lastestPic');
	if(isSuccess) {
		addClass(obj.parentNode.parentNode, "moreBtn");
	}
	if(isSuccess && isLast) {
		if(obj.parentNode.parentNode.parentNode.children.length < 6) {
			removeClass(obj.parentNode.parentNode, "lastestPic");
			$(".picture01").append(html);
		}
	}
}

function hasClass(obj, cls) {
	return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}

function addClass(elements, cName) {
	if(!hasClass(elements, cName)) {
		elements.className += " " + cName;
	}
}

function removeClass(elements, cName) {
	if(hasClass(elements, cName)) {
		elements.className = elements.className.replace(new RegExp("(\\s|^)" + cName + "(\\s|$)"), " "); // replace方法是替换 
	}
}

css

.picture01{
	width: 640px;
	height: 150px;
	float: left;
	margin-left: 15px;
	position: relative;
}

.picDiv{
	width: 150px;
	height:150px;
	display: inline-block;
	float: left;
	margin-left: 10px;
	margin-right: 10px;
	position: relative;
}

.picDiv .localImg{
	width: 150px;
	height:150px;
	/*position: absolute;
	top: 0;
	left: 0;
	overflow: hidden;
	cursor: pointer;*/
}

.picDiv .uploadBtn{
	width: 150px;
	height:150px;
	position: absolute;
	top: 0;
	left: 0;
	overflow: hidden;
	cursor: pointer;
}

.picDiv .localImg .preview{
	width: 100%;
	height: 100%;
}

.picDiv .btnLine{
	width: 100%;
	height: 25px;
	margin-top: 10px;
	position: absolute;
	bottom: 0;
	background-color: rgba(0, 0, 0, 0.70);
	display: none;
}

.moreBtn:hover .btnLine{
	display: block;
}

.moreBtn:hover .delDiv{
	display: block;
}

.picDiv .btnLine .btn1,.picDiv .btnLine .btn2{
	width: 20px;
	height: 20px;
	cursor: pointer;
}

.picDiv .btnLine .btn1{
	float: left;
	margin-left: 10px;
}

.picDiv .btnLine .btn2{
	float: right;
	margin-right: 10px;
}

.picDiv .fileBtn{
	width: 150px;
	height: 150px;
	opacity: 0;
	cursor: pointer;
	filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);
}

.btnLine .btnDiv{
	width: 50%;
	height: 100%;
	display: inline-block;
	float: left;
	cursor: pointer;
	text-align: center;
}
.btnLine .btnDiv .btnIcon{
	display: inline-block;
	float: left;
	width: 15px;
	height: 15px;
	margin-left: 5px;
	margin-top: 2px;
}

.btnLine .btnDiv .btnWords{
	display: inline-block;
	float: left;
	font-size: 12px;
	line-height: 25px;
	color:#fff;
	text-align: center;
	width: 100%;
}

.picDiv .delDiv{
	width: 15px;
	height: 15px;
	position: absolute;
	right: 5px;
	top:5px;
	display: none;
	cursor: pointer;
}
.picDiv .delDiv .delBtn{
	width: 100%;
	height: 100%;
}

.picDiv .btnLine .btnDiv:hover{
	background-color: #000000;
}

实现效果如下


预览、主图、删除按钮函数未写,仅为样式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现上传图片并预览,需要以下步骤: 1. 在前端页面添加一个input标签,type属性设置为file,用于选择本地图片上传。 ``` <input type="file" id="fileInput" onchange="previewImage()"/> ``` 2. 在前端页面添加一个用于预览图片的标签,例如img标签。 ``` <img id="preview" src="" alt="预览图片" style="max-width:200px;max-height:200px;"> ``` 3. 在JavaScript中实现预览图片的功能。 ``` function previewImage() { // 获取选择的文件对象 var file = document.getElementById("fileInput").files[0]; // 创建FileReader对象 var reader = new FileReader(); // 读取文件内容 reader.readAsDataURL(file); // 当文件读取完成时触发onload事件 reader.onload = function(e) { // 获取预览图片的标签对象 var preview = document.getElementById("preview"); // 设置预览图片的地址 preview.src = e.target.result; } } ``` 4. 在后端处理上传的图片。 实现上传图片的后端代码可以使用Java提供的Servlet或Spring MVC框架等进行实现。 以下是一个简单的Servlet上传图片的示例代码: ``` protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传的文件对象 Part part = request.getPart("file"); // 获取文件名 String fileName = part.getSubmittedFileName(); // 获取文件保存的路径 String savePath = request.getServletContext().getRealPath("/upload"); // 创建保存文件的目录 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdirs(); } // 生成保存文件的唯一名称 String uuid = UUID.randomUUID().toString(); String saveName = uuid + "_" + fileName; // 保存文件 part.write(savePath + File.separator + saveName); // 返回保存的文件路径 String filePath = request.getContextPath() + "/upload/" + saveName; response.getWriter().write(filePath); } ``` 在前端页面中,可以使用Ajax将选择的图片文件上传到后端进行处理,并将返回的文件路径设置到预览图片的标签中。 ``` function uploadImage() { var file = document.getElementById("fileInput").files[0]; // 创建FormData对象,用于封装需要上传的数据 var formData = new FormData(); formData.append("file", file); // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 设置请求方式和请求地址 xhr.open("POST", "/uploadServlet"); // 发送请求 xhr.send(formData); // 当请求状态改变时触发onreadystatechange事件 xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { // 获取预览图片的标签对象 var preview = document.getElementById("preview"); // 设置预览图片的地址 preview.src = xhr.responseText; } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值