input file单文件上传和FileReader对象的基本使用

4 篇文章 0 订阅
3 篇文章 0 订阅

多说无益,撸出的代码才是铁的事实。。。

建议:可以先看代码再看步骤也挺不错。。。

第一步:在上传框change的时候,获取自带的files对象,一般获取到的为files[0],如下面代码

oFlieImg.onchange = function(e){
		var _self = e.currentTarget;
		var oSelfFile = _self.files[0];	//获取文件
		console.log(oSelfFile)
}

第二步:实例化FileReader,一般来说在input元素的相关事件(例如onchange)发生的时候,开始实例化一个FileReader,代码如下

var oReader = new FileReader();    // 实例化FileReader对象

第三步:使用FileReader.readAsDataURL(file)读取文件内容,在FileReader对象被实例化之后读取获取到的文件信息。代码入下

oReader.readAsDataURL(oSelfFile);	// 读取文件

第四步:在FileReader对象加载的时候获取到它自己的result值,这里说明一下:获取result值有多种,第一种直接是this.result、第二种是e.currentTarget.result、第三种是e.target.result,其实打印其e的时候你会发现,它所有的对象都在,逐个调用即可。这里因为是基础应用,所以就不多做介绍了。这里获取到的base64,可以直接作为图片的URL使用,也可以直接在跟后端交互的时候传给后端。第四步的代码入下

oReader.onload = function(ev){
		// 获取到FileReader读取文件的base64
		oImgBase64 = ev.currentTarget.result;
}

第五步:其实上面也讲了,就是将获取到的base64直接作为图片的URL使用,也可以直接在跟后端交互的时候传给后端。

最后小狼子把这个简单的案例的代码发给大家,因为没做封装,所以代码有点小乱,希望见谅

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="小狼子<2734339436@qq.com>">
<title>单文件上传</title>
<style type="text/css">
	.fileimg-ct{
		width: 200px;
		height: 200px;
		background-color: #c1cbda;
		position: relative;
		border: 1px #c1cbda solid;
	}
	.fileimg-ct > img{
		border: none;
		background: none;
		width: 160px;
		height: 160px;
		position: absolute;
		left: 20px;
		top: 20px;
		display: none;
		z-index: 3;
	}
	.fileimg-ct > button{
		width: 200px;
		height: 200px;
		background: #fff;
		color: #333;
		margin: 0;
		padding: 0;
		border: none;
		outline: none;
		cursor: pointer
	}
	.fileimg-ct > span{
		font-size: 14px;
		position: absolute;
		right: 10px;
		top: 10px;
		z-index: 3;
		cursor: pointer;
		display: none;
	}
	.fileimg-ct > span:hover{
		color: red;
	}
	.fileimg-ct > input{
		width: 200px;
		height: 200px;
		position: absolute;
		left: 0;
		top: 0;
		z-index: 2;
		opacity: 0;
	}
</style>
</head>
<body>
<div class="fileimg-ct">
	<button>请上传图片</button>
	<span id="clearImg">x</span>
	<input type="file" name="file" id="fileImg" accept=".gif,.jpg,.jpeg,.png">
	<img src="img/m_01.jpeg" id="showImg" width="200" height="200">
</div>
<script type="text/javascript">
	var oFlieImg = document.querySelector('#fileImg');
	var oShowImg = document.querySelector('#showImg');
	var oClearImg = document.querySelector('#clearImg');
	var oImgBase64 = '';
	imgIsEmpty();
	oFlieImg.onchange = function(e){
		var _self = e.currentTarget;
		var oSelfFile = _self.files[0];	//获取文件
		console.log(oSelfFile)
		// console.log(oSelfFile.name.lastIndexOf('.'));
		// 如果要限制文件类型的话这里可以判定oSelfFile.name‘.’最后一次出现的位置之后的单词是否为想要的类型
		// 或者判断oSelfFile.type
		// 判断文件大小为size单位为字节
		var oReader = new FileReader();
		oReader.readAsDataURL(oSelfFile);	// 读取文件
		// 加载文件
		oReader.onload = function(ev){
			// 获取到FileReader读取文件的base64
			oImgBase64 = ev.currentTarget.result;
			// console.log(oImgBase64)
			if (oShowImg) {
				oShowImg.setAttribute('src', oImgBase64);
				imgIsEmpty();
			}
		}
	}
	oClearImg.onclick = function(){
		oShowImg.setAttribute('src', '');
		imgIsEmpty();
	}
	function imgIsEmpty(){
		var oShowSrc = oShowImg.getAttribute('src');
		if (oShowSrc==='') {
			oClearImg.style.display = 'none';
			oShowImg.style.display = 'none';
		}else {
			oShowImg.style.display = 'block';
			oClearImg.style.display = 'block';
		}
	}
	// 没有做封装见谅
</script>
</body>
</html>

好吧,我承认几乎没人会看到这里,但是还是bb一句,如果想要更多的文件上传的操作可以在下方留言哦。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 由于安全性考虑,浏览器不允许通过JavaScript获取input type=file的文件内容。因此,你需要使用其他方法来获取该文件内容。 一种可行的方法是使用HTML5File API。以下是一个使用jQuery和File API获取文件内容的示例: HTML代码: ``` <input type="file" id="fileInput"> <button id="btn">获取文件内容</button> <div id="fileContent"></div> ``` JavaScript代码: ``` $(function() { $('#btn').click(function() { var file = $('#fileInput')[0].files[0]; if (file) { var reader = new FileReader(); reader.onload = function(e) { $('#fileContent').text(e.target.result); }; reader.readAsText(file); } else { $('#fileContent').text('请选择文件'); } }); }); ``` 这段代码首先获取了input type=file元素的文件对象,然后使用FileReader对象读取该文件内容,并将其显示在页面上。请注意,由于安全性限制,该代码只能在本地运行,无法在某些环境中使用。 ### 回答2: 使用Bootstrap无法直接获取input type=file的文件内容,因为Bootstrap是一个前端框架,主要用于构建页面结构和样式。而获取input type=file的文件内容需要使用JavaScript来实现。 要获取input type=file的文件内容,可以使用以下步骤: 1. 通过JavaScript获取input元素,可以使用document.getElementById或者document.querySelector来获取指定的input元素。 2. 给input元素添加change事件监听器,当用户选择了文件后会触发change事件。 3. 在change事件的处理函数中,可以通过event.target.files[0]来获取选择的文件。event.target是事件的目标元素,files属性是一个文件列表,[0]表示获取选中的第一个文件。 4. 可以使用FileReader对象来读取文件内容,通过FileReader.onload事件监听文件内容的读取完成。 5. 在FileReader.onload事件的处理函数中,可以通过event.target.result来获取文件内容,result是一个字符串表示文件的内容。 具体代码如下: ```html <input type="file" id="myFile"> <script> document.getElementById('myFile').addEventListener('change', function(event) { var file = event.target.files[0]; var reader = new FileReader(); reader.onload = function(event) { var content = event.target.result; console.log(content); }; reader.readAsText(file); // 以文本形式读取文件内容 }); </script> ``` 以上代码是一个简示例,当用户选择了文件后,会将文件内容输出到控制台中。实际应用中,可以根据需要将内容显示到页面中或进行其他处理。 ### 回答3: 要使用Bootstrap获取`<input type="file">`的文件内容,可以通过以下步骤来实现: 1. 在HTML中定义一个`<input>`元素,并设置`type="file"`属性。这将创建一个文件上传按钮,用于选择要上传的文件。 ```html <input type="file" id="fileUpload"> ``` 2. 在JavaScript中,找到这个`<input>`元素,并添加一个`change`事件监听器,以便在选择文件后触发相应的操作。 ```javascript $(document).ready(function() { $("#fileUpload").change(function() { var file = this.files[0]; // 获取选择的文件 var reader = new FileReader(); reader.onload = function(e) { var fileContent = e.target.result; // 获取文件内容 // 这里可以对文件内容进行处理或展示 }; reader.readAsText(file); // 以文本形式读取文件内容 }); }); ``` 3. 在`change`事件监听器中创建一个`FileReader`对象,并为其设置一个`onload`事件。当文件加载完成后,`onload`事件将被触发。 4. 在`onload`事件中,可以通过`e.target.result`来获取文件的内容。根据需求,可以对文件内容进行进一步的处理或展示。 需要注意的是,使用Bootstrap只是用来美化或优化页面样式和布局。要获取文件内容,仍然需要使用JavaScript中的`FileReader`对象来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值