关键技术
1、FormData
2、XMLHttpRequest
先在页面布局如下结构
- <form >
- <label for="fileToUpload">Select a File to Upload</label>
- <input type="file" name="fileToUpload" />
- </div>
- <div ></div>
- <div ></div>
- <div ></div>
- <div class="row">
- <input type="button" onclick="uploadFile()" value="Upload" />
- </div>
- <div ></div>
- </form>
以下是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", "/file-upload");
- 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.");
- }
服务器端用node,当然得先添加express依赖
/* @express 4.X
express install
npm install
npm install multer --save
var multer = require ( 'multer' );
app.use(multer({ dest: './file-upload/' }));
*/
var express = require("express"),- app = express(),
- server = require("http").createServer(app),
- fs = require("fs");
- app.listen(6688);
- app.use(express.bodyParser({uploadDir: './upload-file'}));
- app.use(express.static(__dirname + '/static'));
- app.get('/', function(req, res) {
- fs.readFile(__dirname+'/index.html', function(err, data) {
- if (err) {
- res.writeHeader(500);
- res.end('index.html error');
- }
- res.writeHeader(200);
- res.end(data);
- })
- });
- app.post('/file-upload', function(req, res) {
- res.send('ok');
- })
是不是很简单?
以上就是HTML5 带进度条的异步文件上传原理的详细内容,更多关于HTML5 带进度条的异步文件上传原理的资料请关注九品源码其它相关文章!