大文件分片上传服务器

来源:互联网 发布:魔兽世界数7.3数据库 编辑:程序博客网 时间:2024/05/16 12:37


原网站链接:https://note.wiz.cn/web?dc=cae0edbe-64d0-427f-b949-dafd518e6a1c&cmd=kw%2C%E5%A4%A7%E6%96%87%E4%BB%B6&kb=31386f43-b4d3-4fe5-9d04-d1bca7f839c2


index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>login</title>
  6. <link rel="stylesheet" href="css/index.css">
  7. </head>
  8. <body>
  9. <form>
  10. <input type="text" name="username" placeholder="用户名">
  11. <input type="password" name="password" placeholder="密码">
  12. <input type="file" name="file">
  13. <input type="button" value="上传" >
  14. <div></div>
  15. </form>
  16. <script src="js/index.js"></script>
  17. </body>
  18. </html>
index.js
  1. /**
  2. * Created by Administrator on 2017/04/09 0009.
  3. */
  4. function sendForm(){
  5. var process = document.getElementsByTagName('div')[0];
  6. var file = formAll.children[2].files[0];
  7. var size = file.size;
  8. var name = file.name;
  9. var shardSize = 2*1024*1024;
  10. var total = Math.ceil(size/shardSize);
  11. var successed = 0;
  12. var un = document.getElementsByTagName('input')[0];
  13. var pw = document.getElementsByTagName('input')[1];
  14. for(var i=0;i<total;i++){
  15. var start = i*shardSize;
  16. var end = (i+1)*shardSize>size?size:(i+1)*shardSize;
  17. var form = new FormData();
  18. form.append('name',name);
  19. form.append('total',total);
  20. form.append('data',file.slice(start,end));
  21. form.append('index',i);
  22. form.append('un',un.value);
  23. form.append('pw',pw.value);
  24. var xhr = new XMLHttpRequest();
  25. xhr.open('post','http://192.168.0.8:9999/upload');
  26. xhr.send(form);
  27. xhr.onload=function(){
  28. ++successed;
  29. console.log(successed);
  30. process.style.width = (successed/total)*100+"%";
  31. }
  32. }
  33. }
  34. var formAll = document.getElementsByTagName('form')[0];
  35. var uploadBtn = formAll.children[3];
  36. uploadBtn.onclick = sendForm;
httpServer.js
  1. const express = require('express');
  2. const xtpl = require('xtpl');
  3. const formidable = require('formidable');
  4. const fs = require('fs');
  5. const mongoose = require('mongoose');
  6. const router = new express.Router();
  7. var schema = mongoose.Schema;
  8. mongoose.connect('mongodb://127.0.0.1:27017/logindb');
  9. var app = express();
  10. var successed = 0;
  11. var output=[];
  12. app.use(express.static('./static'));
  13. app.set('views','./view');
  14. app.set('view engine','html');
  15. app.engine('html',xtpl.renderFile);
  16. var loginSchema = new mongoose.Schema({
  17. username:String,
  18. passward:String
  19. });
  20. var login = mongoose.model('login',loginSchema);
  21. router.get('/index',function(req,res){
  22. res.render('index.html',{});
  23. });
  24. router.post('/upload',function(req,res){
  25. var form = new formidable.IncomingForm();
  26. form.uploadDir = "./static/upload";
  27. form.keepExtensions = true;
  28. form.parse(req, function(err, fields, files) {
  29. if(output.length==0){
  30. output= new Array(fields.total);
  31. }
  32. output[fields.index]=files.data;
  33. ++successed;
  34. if(successed == fields.total){
  35. function read(i){
  36. var data = fs.readFileSync(output[i].path);
  37. fs.appendFile('./static/upload/'+fields.name,data);
  38. fs.unlink(output[i].path);
  39. i++;
  40. if(i<successed){
  41. read(i);
  42. }else{
  43. successed=0;
  44. output=[];
  45. return;
  46. }
  47. }
  48. read(0);
  49. login.create({username:fields.un+"",passward:fields.pw+""},function(err,result){
  50. if(err){
  51. console.log(err);
  52. return;
  53. }
  54. console.log('ok');
  55. });
  56. }
  57. res.end("1");
  58. });
  59. });
  60. app.use(router);
  61. app.listen(9999,'192.168.0.8');
package.json
  1. {
  2. "name": "mongodb",
  3. "version": "1.0.0",
  4. "description": "mongodb",
  5. "main": "httpServer.js",
  6. "scripts": {
  7. "test": "echo \"Error: no test specified\" && exit 1"
  8. },
  9. "keywords": [
  10. "mongoose"
  11. ],
  12. "author": "chenyanrui",
  13. "license": "ISC",
  14. "dependencies": {
  15. "express": "^4.15.2",
  16. "formidable": "^1.1.1",
  17. "mongoose": "^4.9.3",
  18. "xtemplate": "^4.6.0",
  19. "xtpl": "^3.3.0"
  20. }
  21. }