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}}}最后,非常感谢大家的阅读,希望能帮助到大家!。
HTML5FormData实现文件上传实例
HTML5FormData实现⽂件上传实例表单提交,⽂件上传是⼀个常⽤⼜⼗分⿇烦的功能,以前要上传⽂件通常都是借助插件或者flash来实现,噼⾥啪啦的加载⼀⼤堆东西。
⾃从有了HTML5的FormData后,⽼板再也不⽤担⼼我的上传了。
FormData可以把它理解成⼀个虚拟的表单对象,它只有⼀个⽅法append,这个可以在浏览器console⼀下就知道了。
我们可以通过append 向FormData⾥⾯添加各种需要提交的数据。
你可以先创建⼀个空的FormData 对象,然后使⽤append() ⽅法向该对象⾥添加字段,如下:var oMyForm = new FormData();oMyForm.append("username", "Groucho");oMyForm.append("accountnum", 123456); // 数字123456被⽴即转换成字符串"123456"// fileInputElement中已经包含了⽤户所选择的⽂件oMyForm.append("userfile", fileInputElement.files[0]);var oReq = new XMLHttpRequest();oReq.open("POST", "/submitform.php");oReq.send(oMyForm);如果已经有⼀个Form表单,只需要把这个form 元素作为参数传⼊FormData 构造函数即可:var newFormData = new FormData(someFormElement);var formElement = document.getElementById("myFormElement");var oReq = new XMLHttpRequest();oReq.open("POST", "submitform.php");oReq.send(new FormData(formElement));你还可以在已有表单数据的基础上,继续添加新的键值对,如下:var formElement = document.getElementById("myFormElement");formData = new FormData(formElement);formData.append("serialnumber", serialNumber++);oReq.send(formData);<form enctype="multipart/form-data" method="post" name="fileinfo"><label>Your email address:</label><input type="email" autocomplete="on" autofocus name="userid" placeholder="email" required size="32" maxlength="64"/><br /><label>Custom file label:</label><input type="text" name="filelabel" size="12" maxlength="32"/><br /><label>File to stash:</label><input type="file" name="file" required /></form><div id="output"></div><a href="javascript:sendForm()">Stash the file!</a>然后你就可以使⽤下⾯的代码来异步的上传⽤户所选择的⽂件:function sendForm() {var oOutput = document.getElementById("output");var oData = new FormData(dItem("fileinfo"));oData.append("CustomField", "This is some extra data");var oReq = new XMLHttpRequest();oReq.open("POST", "stash.php", true);oReq.onload = function(oEvent) {if (oReq.status == 200) {oOutput.innerHTML = "Uploaded!";} else {oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br \/>";}};oReq.send(oData);}你还可以使⽤ jQuery 来发送FormData,但必须要正确的设置相关选项:var fd = new FormData(document.getElementById("fileinfo"));fd.append("CustomField", "This is some extra data");$.ajax({url: "stash.php",type: "POST",data: fd,processData: false, // 告诉jQuery不要去处理发送的数据contentType: false// 告诉jQuery不要去设置Content-Type请求头});⼀个完整的例⼦:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>FormData</title></head><body><form name="form1" id="form1"><p>name:<input type="text" name="name"></p><p>gender:<input type="radio" name="gender" value="1">male <input type="radio" name="gender" value="2">female</p> <p>photo:<input type="file" name="photo" id="photo"></p><p><input type="button" name="b1" value="submit" onclick="fsubmit()"></p></form><div id="result"></div></script><script type="text/javascript">function fsubmit() {var form=document.getElementById("form1");var formData=new FormData(form);var oReq = new XMLHttpRequest();oReq.onreadystatechange=function(){if(oReq.readyState==4){if(oReq.status==200){var json=JSON.parse(oReq.responseText);var result = '';// result += 'name=' + ret['name'] + '<br>';// result += 'gender=' + ret['gender'] + '<br>';result += '<img src="' + json['photo'] + '" width="100">';$('#result').html(result);}}}oReq.open("POST", "server.php");oReq.send(formData);return false;}</script></body></html>server.php⽂件:<?php$name = isset($_POST['name'])? $_POST['name'] : '';$gender = isset($_POST['gender'])? $_POST['gender'] : '';$filename = time().substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'],'.'));$response = array();if(move_uploaded_file($_FILES['photo']['tmp_name'], $filename)){$response['isSuccess'] = true;$response['name'] = $name;$response['gender'] = $gender;$response['photo'] = $filename;}else{$response['isSuccess'] = false;}echo json_encode($response);>。
使用Html5的WebSocket在浏览器上传文件
使⽤Html5的WebSocket在浏览器上传⽂件⽂件上传的步骤: 打开websocket--连接websocket服务器--在浏览器⾥选择⽂件--将⽂件读⼊到内存中(以arraybuffer的形式)--在socket⾥发送⽂件--完毕!服务器端:先配置好websocket的服务器, 这⾥⽤⼀个java的开源websocket服务器:根据该项⽬的快速教程可以建⽴⼀个websocket服务器, 就是⾥⾯的⼀个ChatServer.java⽂件. ⼀个聊天室服务器.客户端(html):1.建⽴连接ws = new WebSocket($("#uri").val());//连接成功建⽴后响应ws.onopen = function() {}//收到服务器消息后响应ws.onmessage = function(e) {}//连接关闭后响应ws.onclose = function() {ws = null;}2.读取并发送⽂件var inputElement = document.getElementById("file");var file = inputElement.files;var reader = new FileReader();//以⼆进制形式读取⽂件reader.readAsArrayBuffer(file);//⽂件读取完毕后该函数响应reader.onload = function loaded(evt) {var binaryString = evt.target.result;//发送⽂件ws.send(binaryString);}3. 服务端响应:public void onMessage(WebSocket conn, byte[] message) {//saveFileFromBytesSystem.out.println("收到2进制流");}在服务端响应并保存⽂件, ⽂件传送完毕!未完善的地⽅:1. 多个⽂件读取, file标签中加⼊"multiple"属性可以选择多个⽂件.2. FileRead是将⽂件读⼊到内存的, ⽂件太⼤的话需要分段读取.要注意的地⽅:1. 读取⽂件时要⽤使⽤"readAsArrayBuffer"⽅法, 更多FileRead的⽤法参见2. 如果是⽤Chrome的话,必须把⽹页放在服务器上或插件⾥,file协议下会失败。
C#结合html5批量上传文件和图片预览
C#结合html5批量上传⽂件和图⽚预览html5 新特性<input id="imgsf" type="file" name="imgsf" multiple />input file 中增加 multiple 属性可以选择多⽂件。
IE9以下版本不兼容<form id="form1" method="post" action="upload_json.ashx" enctype="multipart/form-data"><div><input id="imgsf" type="file" name="imgsf" multiple /><input type="text" name="ceshi" value="panlitao" ><input type="submit" value="提交" /></div></form>//预览js<div id="imgrq"></div><script type="text/javascript">$("#imgsf").change(function () {var filedx = 0;for (var i = 0, j = this.files.length; i < j; i++) {$("#imgrq").append("<img src=\"" + window.URL.createObjectURL(this.files[i]) + "\" width=\"100\" height=\"100\" />"); }});</script>C# 代码public class upload_json : IHttpHandler{// private HttpContext context;public void ProcessRequest(HttpContext context){String aspxUrl = context.Request.Path.Substring(0, stIndexOf("/") + 1);//⽂件保存⽬录路径String savePath = "attached/";//⽂件保存⽬录URLString saveUrl = aspxUrl + "attached/";//定义允许上传的⽂件扩展名Hashtable extTable = new Hashtable();extTable.Add("image", "gif,jpg,jpeg,png,bmp");//extTable.Add("flash", "swf,flv");//extTable.Add("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");//extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");//最⼤⽂件⼤⼩int maxSize = 1000000;// this.context = context;String newFileName = "";for (int i = 0; i < context.Request.Files.Count;i++ ){HttpPostedFile imgFile = context.Request.Files[i];if (imgFile == null){showError("请选择⽂件。
可以直接html5标签multiple多input多文件、单input多文件上传.
可以直接html5标签multiple多input多文件、单input多文件上传.formidable 上传 - html5 multiple 多文件上传字数451阅读607评论0喜欢1formidable根据文档,form.multiples = true; 我并没有得到预期的[ files ]所以,写了以下的处理方式: 把所有http请求字段、上传文件合并到一个列表:{'name' : 'lili','phone' : '12345600000','upload_one' : {'1.gif' : { ..., name:'1.gif', path:'/home/aa/tmp/2190eq0919.gi f', ... },'2.txt' : {...},...},'upload_two' : {'11.gif' : { ..., name:'1.gif', path:'/home/aa/tmp/2190eq0919. gif', ... },'21.txt' : {...},...},}可以直接html5标签multiple多input多文件、单input多文件上传.源码如下:var utility = require('utility'),find = require('./find'),http = require('http'),path = require('path'),fs = require('fs'),fd = require('formidable');function connect (routes, conf, cons) {return function (req, res) {var fif = new fd.IncomingForm(),ffiles = {},route; // 路由处理器fif.keepExtensions = true; // 保留扩展名fif.uploadDir = conf.ldir.tmp; // 上传临时目录fif.on('file', function(name, file) {if (typeof ffiles[name] !== 'object' || ffiles[name] === null) { ffiles[name] = {};}ffiles[name][] = file;});fif.parse(req, function (err, fields, files) {res.req = req;// utility.merge为合并函数, 将多个对象合并,类似jQuery的e xtend// 不再列出req.body = utility.merge(fields, ffiles);// 路由处理函数查找,可能每个人写法都不一样route = find(routes, req.headers.host, req.url, req.method);if (typeof route.handler === 'function') {route.handler(req, res, conf, cons);} else {// 404处理}});};}module.exports = connect;重点是var ffiles = {};fif.on('file', function(name, file) {if (typeof ffiles[name] !== 'object' || ffiles[name] === null) { ffiles[name] = {};}ffiles[name][] = file;});建立一个对象ffiles, 存储解析的文件内容ffiles组装完后是这样的:{'upload_one' : {'1.gif' : {..., 'name':'1.gif', path:'...', type:'...', ...},'2.txt' : {...}}}然后将ffiles附到req.body,提升使用范围.req.body.upload_one['1.gif'].name 获取文件名req.body.upload_one['1.gif'].type 获取文件类型req.body.upload_one['1.gif'].path 获取文件上传磁盘路径...其他查看console.log(req.body)。
移动端HTML5实现文件上传功能【附代码】
移动端HTML5实现⽂件上传功能【附代码】PC端上传⽂件多半⽤插件,引⼊flash都没关系,但是移动端要是还⽤各种冗余的插件估计得被喷死,项⽬⾥⾯需要做图⽚上传的功能,既然H5已经有相关的接⼝且兼容性良好,当然优先考虑⽤H5来实现。
⽤的技术主要是:ajaxFileReaderFormDataHTML结构:JavaScript Code复制内容到剪贴板1. <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>已经封装好的upload.js,依赖zeptoJavaScript Code复制内容到剪贴板1. (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. else22. 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);//上传前预览图⽚,也可以通过其他⽅法预览txt35. }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 Code复制内容到剪贴板 $(".camera-area").fileUpload({ "url": "savetofile.php","file": "myFile" }); PHP部分: PHP Code复制内容到剪贴板 <?php if (isset($_FILES['myFile'])) { // Example: writeLog($_FILES); move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']);echo 'successful'; } function writeLog($log){ if(is_array($log) || is_object($log)){ $log = json_encode($log); } $log = $log."\r\n"; file_put_contents('log.log', $log,FILE_APPEND); } ?> 以上这篇移动端HTML5实现⽂件上传功能【附代码】就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
html5实现多文件的上传示例代码
html5实现多⽂件的上传⽰例代码主要⽤到的是<input>的multiple属性复制代码代码如下:<input type="file" name="multipleFileUpload" multiple />下⾯是页⾯的详细代码:复制代码代码如下:<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>Solution 4-5: Sending multiple files</title></head><body><form id="myForm"action="http://10.10.25.31:8080/myupload/UploadPhotoServlet" ENCTYPE="multipart/form-data" METHOD="POST"> <input type="file" name="multipleFileUpload" multiple /> <inputtype="submit" value="提交"> <input type="reset" value="重设"></form></body></html>java后台的详细代码:复制代码代码如下:import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mons.fileupload.FileItem;import mons.fileupload.FileUploadException;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;/*** Servlet implementation class UploadPhotoServlet*/public class UploadPhotoServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public UploadPhotoServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoPost(request,response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/@SuppressWarnings("unchecked")protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String imagePath="c:\\uploadFile\\Image\\"+getEachDate()+"\\";//按⽇期⽣成⽂件夹File uploadPath=new File(imagePath);if(!uploadPath.exists()){uploadPath.mkdirs();}File tmp=new File("c:\\tmp\\");if(!tmp.exists()){tmp.mkdirs();}DiskFileItemFactory factory=new DiskFileItemFactory ();//创建磁盘⼯⼚factory.setRepository(tmp);//设置⽂件缓存路径factory.setSizeThreshold(10 * 1096 );//将⽂件保存在内存还是磁盘临时⽂件夹的默认临界值,值为10240,即10kb ServletFileUpload sfu=new ServletFileUpload(factory);//创建处理⼯具sfu.setSizeMax(10*1024*1024);//服务器端可以接收的最⼤⽂件⼤⼩,-1表⽰⽆上限String fileName=null;try {List<FileItem> list=sfu.parseRequest(request);//解析if(list.size()<1){return;}for(int j=0;j<list.size();j++){FileItem item=list.get(j);fileName=item.getName();if(fileName.equals("")){request.getRequestDispatcher("/com/visualizerPhoto.jsp").forward(request, response);return;}int pos=stIndexOf(".");//取图⽚⽂件格式if(pos>0){Date date=new Date();fileName=imagePath+date.getTime()+fileName.substring(pos);}System.out.println("item:"+item);item.write(new File(fileName));//写到磁盘}} catch (FileUploadException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}// 13-11-15public static String getEachDate() {Calendar cal = Calendar.getInstance();cal.add(Calendar.DATE, 0);String yesterday = new SimpleDateFormat("yyyy-MM-dd ").format(cal.getTime());String[] dates = yesterday.split("-");String realDate = dates[0].substring(2, 4) + "-" + dates[1] + "-"+ dates[2];return realDate.trim();}}下⾯是效果图:。
HTML5拖拽文件上传的示例代码
HTML5拖拽⽂件上传的⽰例代码上传⽂件HTML5新增了⽂件API,提供客户端本地操作⽂件的可能.我们可以通过file表单或拖放操作选择⽂件,还可以通过JavaScript读取⽂件的名称、⼤⼩、类型、和修改时间.file类型的input表单新增了files属性,保存我们上传⽂件的信息,如果要实现多⽂件上传,可以设置input的multiple属性.可以使⽤accept属性规定⽂件上传的MIME类型例如’image/jpeg’<form action="#"><div class="form-group"><label for="input_1">请选择⽂件</label><input id="input_1" class="form-control" name="input_1" type="file"></div><div class="form-group"><button id="btn_1" class="btn btn-default" type="button">读取⽂件信息</button></div></form><pre id="result"></pre></div><script>var btn = document.querySelector('#btn_1');var input = document.querySelector('#input_1');btn.addEventListener('click', function() {// 获取⽂件域中选择的⽂件// var file = input.files[0];var file = input.files.item(0);if (file) {result.innerHTML ='⽂件名:' + + '\n⽂件最近修改时间:' + stModifiedDate+ '\n⽂件类型:' + file.type + '\n⽂件⼤⼩:' + file.size + '字节' } else {result.innerHTML = '没有选择任何⽂件';}});</script>页⾯拖拽操作对于被拖拽的元素,HTML5增加了三个事件⽤于监听拖拽的过程dragstart 拖拽开始drag 正在拖拽dragend 拖拽结束<body><div id="one" style="width: 300px;height: 300px;border: 1px solid red"></div><div id="two" style="width: 100px;height: 100px;border: 1px solid blue" draggable="true"></div></body><script type="text/javascript">two.ondragstart = function(e){// e.preventDefault();console.log(e);e.dataTransfer.setData("Text",e.target.id);console.log(e.dataTransfer.getData("Text",e.target.id));one.innerHTML = '开始'}two.ondrag = function(e){one.innerHTML += '拖动中'}two.ondragend = function(e){one.innerHTML = '结束'}</script>想要拖拽元素,必须设置draggable属性页⾯默认的动作是拖拽后回到原位在拖动阶段,我们可以存储被拖动元素的属性或者状态到事件对象的dataTransfer中,如果出现跳转,则是浏览器默认的事件被触发,我们需要使⽤e.preventDefault()来阻⽌默认事件。
HTML5的input:file上传以及类型控制
HTML5的input:file上传以及类型控制以HTML5的⽂件上传API如下demo代码在.html⽂件打开即可:!DOCTYPE html><html lang="zh_cn"><head><meta charset="UTF-8"><title>HTML5⽂件上传FileReader API</title></head><body><!--⼀个能上传多媒体⽂件的表单--><input type="file" id="upload-file" multiple /><!--显⽰图⽚的地⽅--><div id="destination"></div><script>document.getElementById('upload-file').addEventListener('change', function() {var file;var destination = document.getElementById('destination');destination.innerHTML = '';//每次清空内容// 循环⽤户多选的⽂件for(var x = 0, xlen = this.files.length; x < xlen; x++) {file = this.files[x];console.log(file);if(file.type.indexOf('image') != -1) { // ⾮常简单的交验,判断⽂件是否是图⽚var reader = new FileReader();//⽂件预览对象reader.readAsDataURL(file);//设置要预览的⽂件reader.onload = function(e) {//监听⽂件加载完成事件var img = new Image();//创键预览图⽚img.src = e.target.result; //把预览图⽚的src设置为e.target.result属性。
html5web大文件上传源代码
html5web⼤⽂件上传源代码
众所皆知,web上传⼤⽂件,⼀直是⼀个痛。
上传⽂件⼤⼩限制,页⾯响应时间超时.这些都是web开发所必须直⾯的。
本⽂给出的解决⽅案是:前端实现数据流分⽚长传,后⾯接收完毕后合并⽂件的思路。
实现⽂件夹上传,要求:服务端保留层级结构,⽀持10w级别的⽂件夹上传。
⼤⽂件上传及断点续传,要求:⽀持50G级的单个⽂件上传和续传。
续传要求:在刷新浏览器后能够续传上传,在重启浏览器后能够继续上传上(关闭浏览器后重新打开),在重启电脑后能够继续上传。
⽀持PC端全平台,Windows,Mac,Linux
浏览器要求⽀持全部浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox
下⾯贴出简易DEMO源码分享:
前端页⾯:
后端代码,此Demo是基于MVC架构的:
后端代码我进⾏了模块划化,⽽不是⽹上的将所有的模块放在⼀个类中,这样对于以后的维护和升级来说都是⼀个灾难。
⽂件块处理逻辑
⽂件块保存逻辑如下
web.xml配置如下
整个项⽬的截图
依赖的JAR包如下
运⾏效果如下:
在此分享!希望多多指正~
后端代码逻辑⼤部分是相同的,⽬前能够⽀持MySQL,Oracle,SQL。
在使⽤前需要配置⼀下数据库,可以参考我写的这篇⽂章:。
html5 上传文件功能的代码实现
//上传失败 function uploadFailed(evt) {
alert("上传失败"); } //取消上传 function uploadCanceled(evt) {
alert("您取消了本次上传."); } </script>
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]);
//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';
HTML5实现多张图片上传功能
HTML5实现多张图⽚上传功能图⽚上传之前也有写过,不过是单张上传的,最近有个业务需求是需要多张上传的,于是乎从新改写了⼀下HTML结构:XML/HTML Code复制内容到剪贴板1. <div class="container">2. <label>请选择⼀个图像⽂件:</label>3. <input type="file" id="file_input" multiple/>4. </div>顺便说下这个上传的主要逻辑:·⽤input标签并选择type=file,记得带上multiple,不然就只能单选图⽚了·绑定好input的change时间,·重点就是如何处理这个change事件了,使⽤H5新的FileReader接⼝读取⽂件并打成base64编码,之后的事就是与后端同学交互着玩啦JS代码:JavaScript Code复制内容到剪贴板1. window.onload = function(){2. var input = document.getElementById("file_input");3. var result,div;4.5. if(typeof FileReader==='undefined'){6. result.innerHTML = "抱歉,你的浏览器不⽀持 FileReader";7. input.setAttribute('disabled','disabled');8. }else{9. input.addEventListener('change',readFile,false);10. }<br> //handler11. function readFile(){12. for(var i=0;i<this.files.length;i++){13. if (!input['value'].match(/.jpg|.gif|.png|.bmp/i)){ //判断上传⽂件格式14. return alert("上传的图⽚格式不正确,请重新选择")<br> }15. var reader = new FileReader();16. reader.readAsDataURL(this.files[i]);17. reader.onload = function(e){18. result = '<div id="result"><img src="'+this.result+'" alt=""/></div>';19. div = document.createElement('div');20. div.innerHTML = result;21. document.getElementById('body').appendChild(div); //插⼊dom树 <br> }22. }23. }24. }上传多张图⽚难道就这样实现了吗0.0然⽽并没有,这样只是将图⽚转换成base64编码后再前端显⽰,⼀刷新什么都没有插⼊图⽚后,打开开发者⼯具看html结构是这样的现实的做法是,我们在处理函数⾥将⽂件队列⾥的⽂件发送到后端,后端同学呢返回⽂件对应的MD5加密过⽂件和路径给前端,前端就拿着这个路径渲染到页⾯上。
- 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>。