HTML5 带进度条的异步文件上传原理

前端开发   发布日期:2025年06月04日   浏览次数:168

关键技术

1、FormData

2、XMLHttpRequest

先在页面布局如下结构

  1. <form >
  2. <label for="fileToUpload">Select a File to Upload</label>
  3. <input type="file" name="fileToUpload" />
  4. </div>
  5. <div ></div>
  6. <div ></div>
  7. <div ></div>
  8. <div class="row">
  9. <input type="button" onclick="uploadFile()" value="Upload" />
  10. </div>
  11. <div ></div>
  12. </form>

以下是javascript脚本

  1. function fileSelected() {
  2. var file = document.getElementById('fileToUpload').files[0];
  3. if (file) {
  4. var fileSize = 0;
  5. if (file.size > 1024 * 1024)
  6. fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
  7. else fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
  8. document.getElementById('fileName').innerHTML = 'Name: ' + file.name;
  9. document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize;
  10. document.getElementById('fileType').innerHTML = 'Type: ' + file.type;
  11. }
  12. }
  13. function uploadFile() {
  14. var fd = new FormData();
  15. fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
  16. var xhr = new XMLHttpRequest();
  17. xhr.upload.addEventListener("progress", uploadProgress, false);
  18. xhr.addEventListener("load", uploadComplete, false);
  19. xhr.addEventListener("error", uploadFailed, false);
  20. xhr.addEventListener("abort", uploadCanceled, false);
  21. xhr.open("POST", "/file-upload");
  22. xhr.send(fd);
  23. }
  24. function uploadProgress(evt) {
  25. if (evt.lengthComputable) {
  26. var percentComplete = Math.round(evt.loaded * 100 / evt.total);
  27. document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
  28. } else {
  29. document.getElementById('progressNumber').innerHTML = 'unable to compute';
  30. }
  31. }
  32. function uploadComplete(evt) {
  33. /* This event is raised when the server send back a response */
  34. alert(evt.target.responseText);
  35. }
  36. function uploadFailed(evt) {
  37. alert("There was an error attempting to upload the file.");
  38. }
  39. function uploadCanceled(evt) {
  40. alert("The upload has been canceled by the user or the browser dropped the connection.");
  41. }

服务器端用node,当然得先添加express依赖

/* @express 4.X
express install
npm install
npm install multer --save
var multer = require ( 'multer' );
app.use(multer({ dest: './file-upload/' }));
*/



  1. var express = require("express"),
  2. app = express(),
  3. server = require("http").createServer(app),
  4. fs = require("fs");
  5. app.listen(6688);
  6. app.use(express.bodyParser({uploadDir: './upload-file'}));
  7. app.use(express.static(__dirname + '/static'));
  8. app.get('/', function(req, res) {
  9. fs.readFile(__dirname+'/index.html', function(err, data) {
  10. if (err) {
  11. res.writeHeader(500);
  12. res.end('index.html error');
  13. }
  14. res.writeHeader(200);
  15. res.end(data);
  16. })
  17. });
  18. app.post('/file-upload', function(req, res) {
  19. res.send('ok');
  20. })

是不是很简单?

以上就是HTML5 带进度条的异步文件上传原理的详细内容,更多关于HTML5 带进度条的异步文件上传原理的资料请关注九品源码其它相关文章!