我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript文件上传的常见问题整理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript文件上传的常见问题整理

文件上传:<input type="file" /> (IE9及以下不支持下面这些功能,其它浏览器最新版本均已支持。)

1、允许上传文件数量

允许选择多个文件:

<input type="file" multiple>

只允许上传一个文件:

<input  type="file" single>

2、上传指定的文件格式

<input type="file" accept="image/gif,image/png" />

这里的上传格式仅指打开上传弹窗选择文件时默认的文件格式,可手动修改成其它文件格式。

如果不限制上传图片的格式可写成:accept="imagei, p = document.getElementById('Preview'); var ul = document.getElementById('Errors'); for(var i = 0, f; f = files[i]; i++) { if(!f.type.match(ireg)) { //设置错误信息 var li = document.createElement('li'); li.innerHTML = '<li>' + f.name +'不是图片文件.</li>'; ul.appendChild(li); continue; } var reader = new FileReader(); reader.onload = (function(file) { return function(e) { var span = document.createElement('span'); var img = new Image; img.alt=file.name; img.onload = function() { console.log(img.height); // image is loaded; sizes are available }; img.class="lazy" data-src=this.result; span.innerHTML = '<img class="thumb" class="lazy" data-src="'+ this.result +'" alt="'+ file.name +'" />'; p.insertBefore(span, null); }; })(f); //读取文件内容 reader.readAsDataURL(f); } } if(window.File && window.FileList && window.FileReader && window.Blob) { document.getElementById('Files').addEventListener('change', fileSelect, false); } else { document.write('您的浏览器不支持File Api'); } </script> </body> </html>

上传txt文件内容预览(需对<>&'"|等符号进行过滤否则会中断读取):

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body{margin:0;padding:0;}
img{vertical-align:bottom;}
</style>
</head>
<body>
<input type="file" multiple id="Files">
<div id="Preview"></div>
<ul id="Errors"></ul>
<script>
function encodeHTML(source) { 
    //return source;
    return source 
            .replace(/&/g, '&') 
            .replace(/</g, '<') 
            .replace(/>/g, '>')
            .replace(/\"/g, '"');
}; 
function fileSelect(e) { 
    e = e || window.event; 
        
    var files = e.target.files;  //FileList Objects     
    var ireg = /text\/.*/i, 
        p = document.getElementById('Preview'); 
            
    var ul = document.getElementById('Errors'); 
    for(var i = 0, f; f = files[i]; i++) { 
        console.log(f.type); 
        if(!f.type.match(ireg)) { 
            //设置错误信息 
            var li = document.createElement('li'); 
            li.innerHTML = '<li>' + f.name +'不是文本文件.</li>'; 
                
            ul.appendChild(li); 
                
            continue; 
        } 
            
        var reader = new FileReader(); 
            
        reader.onload = (function(file) { 
            return function(e) { 
                var div = document.createElement('div'); 
                div.className = "text" 
                div.innerHTML = encodeHTML(this.result); 
                    
                p.insertBefore(div, null); 
            }; 
        })(f); 
        //读取文件内容 
        reader.readAsText(f); 
    } 
} 
        
if(window.File && window.FileList && window.FileReader && window.Blob) { 
    document.getElementById('Files').addEventListener('change', fileSelect, false); 
} else { 
    document.write('您的浏览器不支持File Api'); 
} 
</script>
</body>
</html>

读取上传txt指定区域文本内容:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body{margin:0;padding:0;}
img{vertical-align:bottom;}
</style>
</head>
<body>
<input type="file" multiple id="Files">
<button type="button" id="buttons" data-start="0" data-end="3">确定</button>
<div id="range"></div>
<div id="content"></div>
<script>
  
function readBlob(start, end) { 
    var files = document.getElementById('Files').files; 
        
    if(!files.length) { 
        alert('请选择文件'); 
        return false; 
    } 
        
    var file = files[0], 
        start = parseInt(start, 10) || 0, 
        end = parseInt(end, 10) || (file.size - 1); 
            
    var r = document.getElementById('range'), 
        c = document.getElementById('content'); 
            
    var reader = new FileReader(); 
  
    reader.onloadend = function(e) { 
        if(this.readyState == FileReader.DONE) { 
            c.textContent = this.result; 
            r.textContent = "Read bytes: " + (start + 1) + " - " + (end + 1) + " of " + file.size + " bytes"; 
        } 
    }; 
  
    var blob; 
         
    blob = file.slice(start, end + 1, 'text/plain;charset=UTF-8'); 
    reader.readAsBinaryString(blob); 
}; 
    
try { 
    document.getElementById('buttons').addEventListener('click', function(e) { 
        if(e.target.tagName.toLowerCase() == 'button') { 
            var start = e.target.getAttribute('data-start'), 
                end = e.target.getAttribute('data-end'); 
                    
            readBlob(start, end); 
        }   
    }); 
} catch(ex) { 
    alert('something error happens!') 
} 
</script>
</body>
</html>

File接口提供了slice方法支持把文件切成不同的片段,第一个参数是起始的字节数,第二个参数是结束的字节数,还有一个可选的内容类型字符串可以作为第三个参数。早期的chrome和firefox版本不支持file.slice 可使用file.webkitSlice和file.mozSlice替代,最新版本均支持file.slice。

6、文件读取进度

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form> 
    <fieldset> 
        <legend>分度读取文件:</legend> 
        <input type="file" id="File" /> 
        <input type="button" value="中断" id="Abort" /> 
        <p> 
            <label>读取进度:</label><progress id="Progress" value="0" max="100"></progress> 
        </p> 
        <p id="Status"></p> 
    </fieldset> 
</form> 
  
<script>
var h = { 
    init: function() { 
        var me = this; 
            
        document.getElementById('File').onchange = me.fileHandler; 
        document.getElementById('Abort').onclick = me.abortHandler; 
            
        me.status = document.getElementById('Status'); 
        me.progress = document.getElementById('Progress'); 
        me.percent = document.getElementById('Percent'); 
            
        me.loaded = 0; 
        //每次读取1M 
        me.step = 1024 * 1024; 
        me.times = 0; 
    }, 
    fileHandler: function(e) { 
        var me = h; 
            
        var file = me.file = this.files[0]; 
        var reader = me.reader = new FileReader(); 
            
        // 
        me.total = file.size; 
            
        reader.onloadstart = me.onLoadStart; 
        reader.onprogress = me.onProgress; 
        reader.onabort = me.onAbort; 
        reader.onerror = me.onerror; 
        reader.onload = me.onLoad; 
        reader.onloadend = me.onLoadEnd; 
        //读取第一块 
        me.readBlob(file, 0);
    }, 
    onLoadStart: function() { 
        var me = h; 
    }, 
    onProgress: function(e) { 
        var me = h; 
            
        me.loaded += e.loaded; 
        //更新进度条 
        me.progress.value = (me.loaded / me.total) * 100; 
    }, 
    onAbort: function() { 
        var me = h; 
    }, 
    onError: function() { 
        var me = h; 
            
    }, 
    onLoad: function() { 
        var me = h; 
    
        if(me.loaded < me.total) { 
            me.readBlob(me.loaded); 
        } else { 
            me.loaded = me.total; 
        } 
    }, 
    onLoadEnd: function() { 
        var me = h; 
            
    }, 
    readBlob: function(start) { 
        var me = h; 
            
        var blob, 
            file = me.file; 
            
        me.times += 1; 
            
        if(file.slice) { 
            blob = file.slice(start, start + me.step + 1); 
        } else if(file.mozSlice) { 
            blob = file.mozSlice(start, start + me.step + 1); 
        } 
            
        me.reader.readAsText(blob); 
    }, 
    abortHandler: function() { 
        var me = h; 
            
        if(me.reader) { 
            me.reader.abort(); 
        } 
    } 
}; 
    
h.init(); 
</script>
</body>
</html>

本文代码以chrome测试为主。

到此这篇关于JavaScript文件上传问题整理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript文件上传的常见问题整理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript数据结构常见面试问题整理

在JavaScript中,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是带有结构特性的数据元素的集合。常用的数据结构有:数组、列表、栈、队列、链表、字典、集合等等
2022-11-13

Django怎么处理文件上传问题

在Django中处理文件上传问题通常涉及以下几个步骤:在forms.py中定义一个表单类,用于接收文件上传的表单数据。from django import formsclass UploadFileForm(forms.Form):file
Django怎么处理文件上传问题
2024-03-05

win7文件管理常见问题如何解决

今天小编给大家分享一下win7文件管理常见问题如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。win7文件管理常见问题
2023-07-01

使用JsonConverter处理上传文件的路径问题

我们上传一个文件,把文件保存到服务器上,会有一个明确的物理路径,由于需要从前端访问这个文件,还需要web服务器中的一个虚拟路径,我们可以使用JsonConverter来自动处理一下,这篇文章主要介绍了使用JsonConverter处理上传文件的路径,需要的朋友可以参考下
2022-12-24

PHP文件上传用的常见函数有哪些

本文小编为大家详细介绍“PHP文件上传用的常见函数有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP文件上传用的常见函数有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. deldotdeldot
2023-06-29

pandas读取txt文件的常见问题解答

Pandas是Python的一种数据分析工具,特别适合对数据进行清洗、处理和分析。在数据分析过程中,我们时常需要读取各种格式的数据文件,比如Txt文件。但在具体操作过程中,会遇到一些问题。本文将介绍pandas读取txt文件常见问题的解答,
pandas读取txt文件的常见问题解答
2024-01-19

Python中文件操作的常见问题及技巧

Python中文件操作的常见问题及技巧一、文件操作的常见问题文件路径问题:当我们需要操作文件时,首先需要确保我们对文件的路径是正确的。常见的问题包括:文件路径不存在:当我们指定的文件路径不存在时,Python会抛出FileNotFoundE
2023-10-22

Android 解决WebView无法上传文件的问题

Android 解决WebView无法上传文件的问题Android原生的WebView并不支持上传文件,需要我们自己实现相应的方法。于是我把工作中的相关代码记录下来。下次直接拿来用就行了。一点一滴都是经验。 1。需要定义三个变量 priva
2023-05-30

热门标签

编程热搜

编程资源站

目录