原文地址:http://imziv.com/blog/article/read.htm?id=62

之前写过一篇H5异步文件上传的文章, 但是很多朋友看着我的这个教程还是出现很多问题,文章写的不是很好,比较早了。其实通过H5做异步上传已经非常简单了,通过查看文档,便可以很轻松的完成这个功能,当然,如果你不愿意查看文档自己动手的话,那么就用插件咯。h5uploader是我最近封装的HTML5上传插件,代码才白来行,使用的话也比较简单,支持文件大小,类型,progress等等功能。本篇教程,将向你展示Nodejs,Java两种服务端的上传方法,并且附有源代码示例。

插件下载

如果你是bower的用户的话,可以直接通过以下命令:

bower install h5uploader --save

当然也可以直接从Github Clone此项目:

git clone https://github.com/wewoor/h5uploader.git

HTML代码

<input type="file" id="myfile" value="" name="myfile" multiple="multiple"/>
<button id="uploader">Upload</button>

以上是一个file类型的input元素以及一个上传触发按钮,后面带有multiple属性,表示次处支持文件多选上传,当然,你也可以一次提交多个input元素,例如:

<input type="file" id="myfile" value="" name="myfile" multiple="multiple"/>
<input type="file1" id="myfile1" value="" name="myfile" multiple="multiple"/>
<button id="uploader">Upload</button>

这种方法同样是可以的,只不过服务端解析的时候要更麻烦。

Javascript

<script type="text/javascript" src="html5uploader.js"></script>
<script type="text/javascript">
var uploader = document.getElementById('uploader');
uploader.addEventListener("click", function(e) { H5Uploader.upload({
action: 'upload',
id: 'myfile0',
size: {
max: 5000, // 5000kb
valide: function(e) {
if (e) {
alert("The size of " + e.name + " is exceed max value!");
}
}
}, // MB
type: {
name: 'csv;png;jpg',
valide: function(e) {
if (e) {
alert("The type of " + e.name + " is not supported!");
}
}
},
progress: function() {
var p = document.createElement('p');
p.innerHTML = "uploading";
p.id = "loading";
document.body.appendChild(p);
},
success: function(data) {
alert(data);
if (data && data == 200) {
document.getElementById('loading').innerHTML = "The file upload successfully!";
alert("The file upload successfully.");
}
},
fail: function(data) { }
}); }, false);
</script>

以上是针对单个input元素的上传,H5Uploader.upload()方法是支持Array类型和Object类型的,也就是说,如果你有多个input元素同时上传的需求的话,你可以这样写:

   uploader.addEventListener("click", function(e) {

        H5Uploader.upload([{
action: 'upload',
id: 'myfile0',
size: {
max: 5000, // 5000kb
valide: function(e) {
}
}, // MB
type: {
name: 'csv;json',
valide: function(e) {
}
},
progress: function() {
},
success: function(data) {
},
fail: function(data) { }
},{
action: 'upload',
id: 'myfile1',
size: {
max: 5000, // 5000kb
valide: function(e) {
}
}, // MB
type: {
name: 'png;jpg',
valide: function(e) {
}
},
progress: function() {
},
success: function(data) {
},
fail: function(data) { }
}]); }, false);

Nodejs服务端

服务端是expressjs,利用的一个上传中间件multer

var express = require('express');
var multer = require('multer');
var app = express();
var done = false; app.use(express.static('./public')); // respond with "hello world" when a GET request is made to the homepage
app.post('/upload',[multer({dest: './uploads/'}), function(req, res) {
try {
console.log(req.body.myfile);
console.log(req.files);
res.json(200);
} catch (e) {
console.log(e);
}
}]);

完整的示例代码,请看

Java servlet示例

此处没有用任何框架或者库,只是Servlet3.0, 用tomcat6的同学要注意哦。

package com.h5uploader.demo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part; @MultipartConfig
public class UploaderServlet extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException { res.setContentType("text/html;charset=UTF-8"); // Create path components to save the file
final String path = "/Users/ziv/Desktop/";
final Part filePart = req.getPart("myfile0");
final String fileName = getFileName(filePart); OutputStream out = null;
InputStream filecontent = null;
final PrintWriter writer = res.getWriter(); try {
out = new FileOutputStream(new File(path + File.separator
+ fileName));
filecontent = filePart.getInputStream(); int read = 0;
final byte[] bytes = new byte[1024]; while ((read = filecontent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
writer.println("New file " + fileName + " created at " + path); } catch (FileNotFoundException fne) {
writer.println("You either did not specify a file to upload or are "
+ "trying to upload a file to a protected or nonexistent "
+ "location.");
writer.println("<br/> ERROR: " + fne.getMessage()); } finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
if (writer != null) {
writer.close();
}
}
} private String getFileName(final Part part) {
final String partHeader = part.getHeader("content-disposition");
for (String content : part.getHeader("content-disposition").split(";")) {
if (content.trim().startsWith("filename")) {
return content.substring(
content.indexOf('=') + 1).trim().replace("\"", "");
}
}
return null;
} }

以上的上传示例是来自官方的代码,我个人也是测试过的,完整的示例

另外我还写了一个sails的版本,有需要的可以点击查看

结语

以上则是这个插件使用的全部内容,如果有什么问题可以直接点击示例代码进行查看,另外插件是我才写出来的,如果有什么问题请告诉我。谢谢,希望它能帮助你!

作者:Ziv小威

原文地址:http://imziv.com/blog/article/read.htm?id=62

HTML5 文件异步上传 — h5uploader.js的更多相关文章

  1. fromdata上传文件,ajax上传文件, 纯js上传文件,html5文件异步上传

    前端代码: 上传附件(如支付凭证等) <input type="file" name="fileUpload" id="fileUpload&q ...

  2. HTML5实现图片文件异步上传

    原文:HTML5实现图片文件异步上传 利用HTML5的新特点做文件异步上传非常简单方便,本文主要展示JS部分,html结构.下面的代码并未使用第三发库,如果有参照,请注意一些未展现出来的代码片段.我这 ...

  3. js 文件异步上传 显示进度条 显示上传速度 预览文件

    通常文件异步提交有几个关键 1.支持拖拽放入文件.2.限制文件格式.3.预览图片文件.4.上传进度,速度等,上传途中取消上传.5.数据与文件同时上传 现在开始笔记: 需要一个最基础的元素<inp ...

  4. MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传

    本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小  ...

  5. 文件的上传(表单上传和ajax文件异步上传)

    项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一. ...

  6. 普通文件的上传(表单上传和ajax文件异步上传)

    一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...

  7. SpringMVC + AJAX 实现多文件异步上传

    转自:https://www.jianshu.com/p/f3987f0f471f 今天,我就这个问题来写一篇如何用 SpringMVC + AJAX 实现的多文件异步上传功能.基本的代码还是沿用上篇 ...

  8. 文件的上传(1)(表单上传和ajax文件异步上传)

    文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...

  9. 小程序使用 Promise.all 完成文件异步上传

    小程序使用 Promise.all 完成文件异步上传 extends [微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 - Kindear - 博客园 (cnblogs.com)] ...

随机推荐

  1. windows 2008 r2 下面搭建 iis+sql server +php5.6 环境遇见的一些问题记录一下

    由于web服务器以前在iis下部署有几个网站,现在这个项目开发又是用的php,本来php+mysql+iis应该很简单随便在网上能搜索出来很多,但是,由于以前那个web网站是用的sqlserver数据 ...

  2. Sql Server 高频,高并发访问中的键查找死锁解析

    死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.但有时因为一些特殊应用场景如高频查询,高并发查询下由于数据库 ...

  3. JQuery异步提交

    JQuery提交部分 $.ajax({ url:'www.baidu.com', //提交的地址,相当于form的action type:'POST', //提交方式,相当于form的method d ...

  4. linux 下安装nodejs,CentOS 6.5 系统

    本文采用nodejs 通过源码编译安装方式 编译需要gcc-c++编译器和openssl-devel库的支持,如果没有需要先安装. 在centos下可以先执行:yum install gcc-c++ ...

  5. ubuntu16.04服务器配置ssh免密登录

    原版资料英文,链接在此  https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2 在客户端操作 ssh-k ...

  6. (四) openwrt单个ipk编译过程

    Tags : Makefile 本周是成胖子每周一博的第五周. 更好的阅读体验,请点击这里 [TOC] 前言 前一篇博客中,我们已经知道整个openwrt的编译顺序,本文我们来探讨与开发者息息相关的单 ...

  7. 从mysql数据表中随机取出一条记录

    核心查找数据表代码: ; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. S ...

  8. C语言使用宏实现2个变量的交换

    记录哪个方法更普适,更高效,这些方法不包括使用函数的方法,如果使用函数的话,使用指针的方法更合适. 使用中间变量 形如 int tmp, tmp = a; a=b; b = tmp; #define ...

  9. jquery中的clone()方法使用

    clone([Even[,deepEven]]) 描述: 克隆匹配的DOM元素并且选中这些克隆的副本. 在想把DOM文档中元素的副本添加到其他位置时这个函数非常有用. 1:一个布尔值(true 或者 ...

  10. 三维网格去噪算法(bilateral filter)

    受图像双边滤波算法的启发,[Fleishman et al. 2003]和[Jones et al. 2003]分别提出了利用双边滤波算法对噪声网格进行光顺去噪的算法,两篇文章都被收录于当年的SIGG ...