加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

HTML5应用之文件上传

发布时间:2020-03-15 16:13:27 所属栏目:编程 来源:站长网
导读:副问题#e# 恒久以来,开拓者们一向为此苦恼,大部门为办理这个题目都回收了flash作为办理方案,但flash并非灵丹灵药,由于flash版本,分裂造成的题目偶然反倒成为了恶梦。有些网站则回收了form标签的enctype=multipart/form-data属性,但这一属性要求处事器

在代码的第二行中,我们的JS代码又行使了另一个HTML5推出的新工具——FormData。FormData工具是用户的表单数据的荟萃,它以键值对的情势存储了表单数据,其值可以或许包罗数字、字符串以及文件。我们通过辗转这个工具,来向处事器提交数据。

虽然,这个工具我们也可以在代码中手工构建,好比说像下面这样:

var fd = new FormData(); fd.append("author", "Shiv Kumar"); fd.append("name", "Html 5 File API/FormData"); fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);

回到正题。回首上一段代码,我们增进了很多有关XMLHttpRequest的变乱监听,其目标是为了获取文件上传的真实环境。尤其必要留意的是,我们所挂钩的,并不是XMLHttpRequest自己,而是其属性,好比uploadProgress。

完备代码

最后,来看看完备的代码。

<!DOCTYPE html> <html> <head> <title>Upload Files using XMLHttpRequest - Minimal</title> <script type="text/javascript"> function fileSelected() { var file = document.getElementById('fileToUpload').files[0]; if (file) { var fileSize = 0; if (file.size > 1024 * 1024) fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB'; else fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB'; document.getElementById('fileName').innerHTML = 'Name: ' + file.name; document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize; document.getElementById('fileType').innerHTML = 'Type: ' + file.type; } } function uploadFile() { var fd = new FormData(); fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]); var xhr = new XMLHttpRequest(); xhr.upload.addEventListener("progress", uploadProgress, false); xhr.addEventListener("load", uploadComplete, false); xhr.addEventListener("error", uploadFailed, false); xhr.addEventListener("abort", uploadCanceled, false); xhr.open("POST", "UploadMinimal.aspx"); xhr.send(fd); } function uploadProgress(evt) { if (evt.lengthComputable) { var percentComplete = Math.round(evt.loaded * 100 / evt.total); document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%'; } else { document.getElementById('progressNumber').innerHTML = 'unable to compute'; } } function uploadComplete(evt) { /* This event is raised when the server send back a response */ alert(evt.target.responseText); } function uploadFailed(evt) { alert("There was an error attempting to upload the file."); } function uploadCanceled(evt) { alert("The upload has been canceled by the user or the browser dropped the connection."); } </script> </head> <body> <form id="form1" enctype="multipart/form-data" method="post" action="upload.php"> <div class="row"> <label for="fileToUpload">Select a File to Upload</label> <input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/> </div> <div id="fileName"></div> <div id="fileSize"></div> <div id="fileType"></div> <div class="row"> <input type="button" onclick="uploadFile()" value="Upload" /> </div> <div id="progressNumber"></div> </form> </body> </html>

我们的使命完成了吗?可以说完成了,由于这段代码已经可以或许完成上传文件的使命,并且也可以或许表现上传的进度;可是理应说我们没有,由于除了这个骨架HTML之外,我们尚有许多没有做的工作,好比CSS的美化等等。不外这就不是我们这篇文章的主题了。

最后,提示一下,教程的代码该当在支持新特征的赏识器之上运行,假如你不清晰本身的赏识器是否支持,可以在这里查询。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读