关于HTML中异步上传文件实现,以下是一份完整攻略:
目录
- 前言
- 总需求
- 步骤1:HTML代码
- 步骤2:JS代码
- 示例1:基础版
- 示例2:高级版
- 总结
前言
在网页开发中,常常需要上传文件,比如用户头像、文件下载等等。但是对于比较大的文件,直接使用传统方式会造成页面卡死、上传时间过长等问题。这时候异步上传就显得非常重要。因此,本文将对HTML异步上传文件的实现进行详细讲解。
总需求
在HTML页面上,我们需要实现如下功能:
- 点击上传按钮后,能够选择本地文件并上传至服务器
- 实时显示上传进度
- 上传成功后,页面能够展示已上传的文件
步骤1:HTML代码
首先,我们需要一个HTML页面来展示上传按钮和上传进度等信息。以下是一个基础版的HTML代码:
<!DOCTYPE html>
<html>
<head>
<title>异步上传文件示例</title>
<meta charset="UTF-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<h1>异步上传文件示例</h1>
<input type="file" name="file" id="file">
<button id="uploadBtn">上传</button>
<div id="progress" style="width:0%"></div>
<p>已上传的文件:</p>
<ul id="fileList">
</ul>
</body>
</html>
上述代码实现了一个包含上传按钮和进度条的基础版页面,并引入了jQuery依赖库。
步骤2:JS代码
接着,我们需要使用JavaScript代码来实现异步上传文件的功能。以下是一个基础版的JS代码:
$(function(){
$('#uploadBtn').click(function(){
var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url: 'upload.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
xhr: function(){
var xhr = $.ajaxSettings.xhr();
xhr.upload.onprogress = function(e){
if(e.lengthComputable){
var progress = e.loaded / e.total;
$('#progress').css('width', progress*100+'%');
}
};
return xhr;
},
success: function(data){
$('#fileList').append('<li>'+data+'</li>');
}
});
});
});
上述代码中,我们使用了jQuery的ajax方法实现异步上传。同时,我们使用了FormData对象将文件数据封装起来,这使得我们可以方便地上传文件。
formData.append('file', $('#file')[0].files[0]);
另外,我们使用了xhr对象的onprogress事件来实时获得上传进度,并通过jQuery操作DOM实现进度条的显示。
xhr.upload.onprogress = function(e){
if(e.lengthComputable){
var progress = e.loaded / e.total;
$('#progress').css('width', progress*100+'%');
}
};
在上传成功后,我们使用success回调函数来将上传结果显示在页面上。
success: function(data){
$('#fileList').append('
');
}
到此为止,我们已经实现了一个基础版的异步上传文件功能。但是这个功能还有提升的空间。接下来,我们将介绍另一个高级版的示例。
示例1:基础版
在基础版上进行改进,我们可以让用户在页面上实时展示上传的文件。我们可以将文件数据存储在数组中,在上传成功后将文件名动态的显示出来。以下是一个示例代码:
$(function(){
var files = [];
$('#file').change(function(){
var fileList = this.files;
for(var i=0; i<fileList.length; i++){
files.push(fileList[i]);
var li = $('<li>'+fileList[i].name+'</li>');
$('#fileList').append(li);
}
});
$('#uploadBtn').click(function(){
var formData = new FormData();
for(var i=0; i<files.length; i++){
formData.append('file[]', files[i]);
}
$.ajax({
url: 'upload.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
xhr: function(){
var xhr = $.ajaxSettings.xhr();
xhr.upload.onprogress = function(e){
if(e.lengthComputable){
var progress = e.loaded / e.total;
$('#progress').css('width', progress*100+'%');
}
};
return xhr;
},
success: function(data){
alert('上传成功');
}
});
});
});
示例2:高级版
在基础版的基础上,我们可以增加删除文件和上传之前文件的预览功能,提高用户体验。以下是一个高级版的示例代码:
$(function(){
var files = [];
$('#file').change(function(){
var fileList = this.files;
for(var i=0; i<fileList.length; i++){
files.push(fileList[i]);
var li = $('<li>'+fileList[i].name+'</li>');
$('#fileList').append(li);
}
});
$('#fileList').on('click', 'li', function(){
var index = $(this).index();
files.splice(index, 1);
$(this).remove();
});
$('#uploadBtn').click(function(){
var formData = new FormData();
for(var i=0; i<files.length; i++){
formData.append('file[]', files[i]);
}
$.ajax({
url: 'upload.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
xhr: function(){
var xhr = $.ajaxSettings.xhr();
xhr.upload.onprogress = function(e){
if(e.lengthComputable){
var progress = e.loaded / e.total;
$('#progress').css('width', progress*100+'%');
}
};
return xhr;
},
success: function(data){
alert('上传成功');
}
});
});
});
总结
通过上述讲解和示例代码,我们详细讲解了HTML异步上传文件的实现过程,并提供了基础版和高级版两个不同的示例供参考。希望对您进行网站开发有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:html中异步上传文件实现示例 - Python技术站