html5 上传文件功能的代码实现
HTML5文件上传下载的实例代码

HTML5⽂件上传下载的实例代码前⾔HTML5 中提供的⽂件API在前端中有着丰富的应⽤,上传、下载、读取内容等在⽇常的交互中很常见。
⽽且在各个浏览器的兼容也⽐较好,包括移动端,除了 IE 只⽀持 IE10 以上的版本。
想要更好地掌握好操作⽂件的功能,先要熟悉每个API。
FileList 对象和 file 对象HTML 中的 input[type="file"] 标签有个 multiple 属性,允许⽤户选择多个⽂件,FileList对象则就是表⽰⽤户选择的⽂件列表。
这个列表中的每⼀个⽂件,就是⼀个 file 对象。
1. file 对象的属性:2. name : ⽂件名,不包含路径。
3. type : ⽂件类型。
图⽚类型的⽂件都会以 image/ 开头,可以由此来限制只允许上传图⽚。
4. size : ⽂件⼤⼩。
可以根据⽂件⼤⼩来进⾏其他操作。
5. lastModified : ⽂件最后修改的时间。
<input type="file" id="files" multiple><script>var elem = document.getElementById('files');elem.onchange = function (event) {var files = event.target.files;for (var i = 0; i < files.length; i++) {// ⽂件类型为 image 并且⽂件⼤⼩⼩于 200kbif(files[i].type.indexOf('image/') !== -1 && files[i].size < 204800){console.log(files[i].name);}}}</script>input 中有个 accept 属性,可以⽤来规定能够通过⽂件上传进⾏提交的⽂件类型。
HTML5文件上传相关技术及示例

1.2 HTML5 dataTransfer 对象 ............................................................................................ 12 1.2.1 DataTransfer 对象中的典型属性...................................................................... 12 1.2.2 HTML5 基于拖拽(Drag&Drop)的事件机制 .............................................. 14 1.2.3 代码示例............................................................................................................ 14
1.1.2 HTML5 的进度事件 1、HTML5 当中新增了一个进度事件(Progress Events)
这个事件为我们提供了以下属性信息: (1)total – 整型值,用于指定传输数据的总字节数(文件大小) (2)loaded –整型值,用于指定上传的字节(已上传的大小) (3)lengthComputable –布尔类型值,用于检测上传文件大小是否可计算(进度是否可计 算) 1.1.3 HTML5 文件上传的<input>标签 1、增加了 onchange 事件
移动端HTML5实现文件上传

PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现。
用的技术主要是:ajaxFileReaderFormDataHTML结构:XML/HTML Code1.<div class="camera-area"> 2. <form enctype="multipart/form-data" method="post"> 3. <input type="file" name="fileToUpload" class="fileToUpload" accept="image/*" capture="camera"/> 4. <div class="upload-progress"><span></span></div> 5. </form> 6. <div class="thumb"></div> 7. </div> 8. 已经封装好的upload.js,依赖zeptoJavaScript Code1.(function($) { 2. $.extend($.fn, { 3. fileUpload: function(opts) { 4. this.each(function() { 5. var $self = $(this); 6. var doms = { 7. "fileToUpload": $self.find(".fileToUpload"), 8. "thumb": $self.find(".thumb"), 9. "progress": $self.find(".upload-progress") 10. }; 11. var funs = { 12. //选择文件,获取文件大小,也可以在这里获取文件格式,限制用户上传非要求格式的文件 13. "fileSelected": function() { 14. var files = (doms.fileToUpload)[0].files; 15. var count = files.length; 16. for (var index = 0; index < count;index++) { 17. var file = files[index]; 18. var fileSize = 0; 19. if (file.size > 1024 * 1024) 20. fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB'; 21. else 22. fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB'; 23. } 24. funs.uploadFile(); 25. }, 26. //异步上传文件 27. uploadFile: function() { 28. var fd = new FormData();//创建表单数据对象 29. var files = (doms.fileToUpload)[0].files; 30. var count = files.length; 31. for (var index = 0; index < count; index++) { 32. var file = files[index]; 33. fd.append(opts.file, file);//将文件添加到表单数据中 34. funs.previewImage(file);//上传前预览图片,也可以通过其他方法预览txt 35. } 36. var xhr = new XMLHttpRequest(); 37. xhr.upload.addEventListener("progress", funs.uploadProgress, false);//监听上传进度 38. xhr.addEventListener("load", funs.uploadComplete, false); 39. xhr.addEventListener("error", opts.uploadFailed, false); 40. xhr.open("POST", opts.url); 41. xhr.send(fd); 42. }, 43. //文件预览 44. previewImage: function(file) { 45. var gallery = doms.thumb; 46. var img = document.createElement("img"); 47. img.file = file; 48. doms.thumb.html(img); 49. // 使用FileReader方法显示图片内容 50. var reader = new FileReader(); 51. reader.onload = (function(aImg) { 52. return function(e) { 53. aImg.src = e.target.result; 54. }; 55. })(img); 56. reader.readAsDataURL(file); 57. }, 58. uploadProgress: function(evt) { 59. if (evt.lengthComputable) { 60. var percentComplete = Math.round(evt.loaded * 100 / evt.total); 61. doms.progress.html(percentComplete.toString() + '%'); 62. } 63. }, 64. "uploadComplete": function(evt) { 65. alert(evt.target.responseText) 66. } 67. }; 68. doms.fileToUpload.on("change", function() { 69. doms.progress.find("span").width("0"); 70. funs.fileSelected(); 71. }); 72. }); 73. } 74. }); 75.})(Zepto); 调用方法:JavaScript Code1.$(".camera-area").fileUpload({ 2. "url": "savetofile.php", 3. "file": "myFile" 4. }); PHP部分:PHP Code1.<?php 2.if (isset($_FILES['myFile'])) { 3. // Example: 4. writeLog($_FILES); 5. move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']); 6. echo 'successful'; 7.} 8.function writeLog($log){ 9. if(is_array($log) || is_object($log)){ 10. $log = json_encode($log); 11. } 12. $log = $log."\r\n"; 13. 14. file_put_contents('log.log', $log,FILE_APPEND); 15.} 16.?> 以上就是本文的全部内容,希望对大家的学习有所帮助。
HTML5应用之文件拖拽上传

HTML5应用之文件拖拽上传使用HTML5的文件API,可以将操作系统中的文件拖放到浏览器的指定区域,实现文件上传到服务器。
本文将结合实例讲解HTML5+jQuery+PHP实现拖拽上传图片的过程,来看下HTML5的魅力吧。
HTML我们在页面中放置一个拖拽区域#drop_area,即接收拖拽的区域,#preview用来预览拖拽上传的图片信息。
<div id="drop_area">将图片拖拽到此区域</div><div id="preview"></div>Javascript要想实现拖拽,页面需要阻止浏览器默认行为,即四个事件(拖离、拖后放、拖进、拖来拖去),因为我们要阻止浏览器默认将图片打开的行为,这里我们使用jQuery来完成。
$(function(){//阻止浏览器默认行。
$(document).on({dragleave:function(e){ //拖离e.preventDefault();},drop:function(e){ //拖后放e.preventDefault();},dragenter:function(e){ //拖进e.preventDefault();},dragover:function(e){ //拖来拖去e.preventDefault();}});...});接下来我们来了解下文件API。
HTML5的文件API有一个FileList接口,它可以通过e.dataT ransfer.files拖拽事件传递的文件信息,获取本地文件列表信息。
var fileList = e.dataTransfer.files;使用files 方法将会获取到拖拽文件的数组形势的数据,每个文件占用一个数组的索引,如果该索引不存在文件数据,将返回null 值。
可以通过length属性获取文件数量.var fileNum = fileList.length;在本例中,我们用javascript来侦听drop事件,首先要判断拖入的文件是否符合要求,包括图片类型、大小等,然后获取本地图片信息,实现预览,最后上传。
基于HTML5+js+Java实现单文件文件上传到服务器功能

基于HTML5+js+Java实现单⽂件⽂件上传到服务器功能上传单⽂件到服务器应公司要求,在HTML5页⾯上实现上传⽂件到服务器,对于⼀个还没毕业的实习⽣菜鸟来说,这可不得了-----不会,⽹上各种百度,找各种博客还是没解决,最后还是请教了公司的⼤神,⼈家给卸了⼀个例⼦,然后根据⼈家写的终于把这个上传⽂件搞定。
好了,开始上代码。
HTML5代码:<form name="upform" action="" method="POST"><input type ="file" name="myfile1" id="myfile1"/><br/><input type ="file" name="myfile2" id="myfile2"/><br/>备注:<input type="text" name="mydata" id="mydata"/><br/><input type="button" value="确定" onclick="upload()"/><br/></form>js代码:FormData可以把它理解成⼀个虚拟的表单对象,它只有⼀个⽅法append,我们可以通过append向FormData⾥⾯添加各种需要提交的数据。
url:/adata/adata/payment/PaymentAction/upload.menu----指的是你Java接受信息的action路径_pathName=/adata//payment.jsp-----------指的是你HTML5页⾯的虚拟路径。
HTML5实现文件上传下载功能实例解析

HTML5实现⽂件上传下载功能实例解析前⾔:因⾃⼰负责的项⽬(jetty内嵌启动的SpringMvc)中需要实现⽂件上传,⽽⾃⼰对java⽂件上传这⼀块未接触过,且对 Http 协议较模糊,故这次采⽤渐进的⽅式来学习⽂件上传的原理与实践。
该博客重在实践。
⼀. Http协议原理简介HTTP是⼀个属于应⽤层的⾯向对象的协议,由于其简捷、快速的⽅式,适⽤于分布式超媒体信息系统。
它于1990年提出,经过⼏年的使⽤与发展,得到不断地完善和扩展。
⽬前在WWW中使⽤的是HTTP/1.0的第六版,HTTP/1.1的规范化⼯作正在进⾏之中,⽽且HTTP-NG(Next Generation of HTTP)的建议已经提出。
简单来说,就是⼀个基于应⽤层的通信规范:双⽅要进⾏通信,⼤家都要遵守⼀个规范,这个规范就是HTTP协议。
1.特点:(1)⽀持客户/服务器模式。
(2)简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。
请求⽅法常⽤的有GET、HEAD、POST。
每种⽅法规定了客户与服务器联系的类型不同。
由于HTTP协议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。
(3)灵活:HTTP允许传输任意类型的数据对象。
正在传输的类型由Content-Type加以标记。
(4)⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。
服务器处理完客户的请求,并收到客户的应答后,即断开连接。
采⽤这种⽅式可以节省传输时间。
(5)⽆状态:HTTP协议是⽆状态协议。
⽆状态是指协议对于事务处理没有记忆能⼒。
缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。
另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快。
注意:其中(4)(5)是⾯试中常⽤的⾯试题。
虽然HTTP协议(应⽤层)是⽆连接,⽆状态的,但其所依赖的TCP协议(传输层)却是常连接、有状态的,⽽TCP协议(传输层)⼜依赖于IP协议(⽹络层)。
利用html5分片上传超大文件

在网页中直接上传大文件一直是个比较头疼的问题,主要面临的问题一般包括两类:一是上传时间长中途一旦出错会导致前功尽弃;二是服务端配置复杂,要考虑接收超大表单和超时问题,如果是托管主机没准还改不了配置,默认只能接收小于4mb的附件。
比较理想的方案是能够把大文件分片,一片一片的传到服务端,再由服务端合并。
这么做的好处在于一旦上传失败只是损失一个分片而已,不用整个文件重传,而且每个分片的大小可以控制在4mb以内,服务端不用做任何设置就可适应。
常用的解决方案是ria,以flex为例,通常是利用filereference.load方法加载文件得到bytearray,然后分片构造表单(flash的高版本不允许直接访问文件)。
不过这个load方法只能加载较小的文件,大约不超过300mb,因此适用性不是很强。
好在现在有了html5,我们可以直接构造分片了,这是一个非常喜人的进步,只可惜目前适用面不广(ie啊ie,真是恨你恨得牙痒痒)。
言归正传,来看一个demo吧,基于 mvc3,只是示例,很多问题做了简化处理。
主要是客户端,新特性都体现在这里:<%@ page language=c# inherits=system.web.mvc.viewpage<dynamic> %><!doctype html><html lang=zh-cn><head><meta charset=utf-8><title>html5大文件分片上传示例</title><script src=../scripts/jquery-1.11.1.min.js></script><script>var page = {init: function(){$(#upload).click($.proxy(this.upload, this));},upload: function(){var file = $(#file)[0].files[0], //文件对象name = , //文件名size = file.size, //总大小succeed = 0;var shardsize = 2 * 1024 * 1024, //以2mb为一个分片shardcount = math.ceil(size / shardsize); //总片数for(var i = 0;i < shardcount;++i){//计算每一片的起始与结束位置var start = i * shardsize,end = math.min(size, start + shardsize);//构造一个表单,formdata是html5新增的var form = new formdata();form.append(data, file.slice(start,end)); //slice方法用于切出文件的一部分form.append(name, name);form.append(total, shardcount); //总片数form.append(index, i + 1); //当前是第几片//ajax提交$.ajax({url: ../file/upload,type: post,data: form,async: true, //异步processdata: false, //很重要,告诉jquery不要对form进行处理contenttype: false, //很重要,指定为false才能形成正确的content-typesuccess: function(){++succeed;$(#output).text(succeed + / + shardcount);}});}}};$(function(){page.init();});</script></head><body><input type=file id=file /><button id=upload>上传</button><span id=output style=font-size:12px>等待</span></body></html>这里的slice方法和formdata都是html5之前不存在的。
php使用html5实现多文件上传实例

php使用html5实现多文件上传实例php使用html5实现多文件上传实例在html没有出来之前,要实现php多文件上传比较麻烦,需要在form表单里面添加多个input file域。
html5发布以后,我们可以使用input file的html5属性multiple来实现多文件上传,需要的.朋友可以参考下。
首先向大家介绍一下html5中file的multiple属性定义和用法:multiple 属性规定输入字段可选择多个值。
如果使用该属性,则字段可接受多个值。
实例:<form action="demo_form.asp" method="get">Select images: <input type="file" name="img" multiple="multiple" /><input type="submit" /></form>上面实例中的input file 可接受多个文件上传字段。
了解了html5中file的multiple属性,下面我们开始讲解使用html5实现多文件上传。
实例代码:html:<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body><form action="my_parser.php" method="post" enctype="multipart/form-data"><p><input name="upload[]" type="file" multiple="multiple" /></p><input type="submit" value="Upload all files"></form></body></html>php代码:for($i=0; $i<count($_FILES['upload']['name']); $i++) {//Get the temp file path$tmpFilePath = $_FILES['upload']['tmp_name'][$i];//Make sure we have a filepathif ($tmpFilePath != ""){//Setup our new file path$newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];//Upload the file into the temp dirif(move_uploaded_file($tmpFilePath, $newFilePath)) {//Handle other code here}}}最后,非常感谢大家的阅读,希望能帮助到大家!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
html5 上传文件功能的代码实现
Html5代码:
<form id="form1" enctype="multipart/form-data" method="post" acti on="http://121.14.204.68:36161/eqp/upload?strOperator=chenzl">
<div class="row">
<label for="fileToUpload">选择文件</label>
<input type="file" name="fileName" id="fileName" onchange="fileSe lected();"/>
</div>
<div id="fileName"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<div class="row">
上传者:<input type="text" name="name" id="name"/>
<input type="button" onclick="uploadFile()" value="上传" />
<input type="button" onclick="cancleUploadFile()" value="取消" /> </div>
<div id="progressNumber"></div>
</form>
Javascrpit代码:
<script type="text/javascript">
ar xhr = new XMLHttpRequest();
//监听选择文件信息
function fileSelected() {
//HTML5文件API操作
var file = document.getElementById('fileName').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: '+ ;
document.getElementById('fileSize').innerHTML = 'Size: '+ fileSize;
document.getElementById('fileType').innerHTML = 'Type: '+ file.type;
}
}
//上传文件
function uploadFile() {
var fd = new FormData();
//关联表单数据,可以是自定义参数
fd.append("name", document.getElementById('name').value);
fd.append("fileName",
document.getElementById('fileName').files[0]);
//监听事件
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
//发送文件和表单自定义参数
xhr.open("POST",
"http://121.14.204.68:36161/eqp/upload?strOperator=chenzl");
xhr.send(fd);
}
//取消上传
function cancleUploadFile() {
xhr.abort();
}
//上传进度
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) {
//服务断接收完文件返回的结果
alert(evt.target.responseText);
}
//上传失败
function uploadFailed(evt) {
alert("上传失败");
}
//取消上传
function uploadCanceled(evt) {
alert("您取消了本次上传.");
}
</script>。