zoukankan      html  css  js  c++  java
  • ajax2.0、FormData、express拖拽文件上传及进度条Demo

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>文件上传</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .box{
                width: 300px;
                height: 200px;
                border: 1px solid black;
                background: #eee;
                position: absolute;
                top: 50%;
                left: 50%;
                margin-left: -150px;
                margin-top: -100px;
                line-height: 200px;
                text-align: center;
            }
        </style>
    </head>
    <body>
        user: <input type="text" id="user"><br>
        pass: <input type="password" id="pass">
        <progress max="100" id="prog"></progress>  <!--进度条-->
        <div class="box">
            将文件拖拽至此
        </div>
    
        <script src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script>
        <script>
            var box = document.querySelector('.box');
            box.ondragenter=function(e){    //drag相关拖拽事件
                this.innerText = '放手上传'
            };
            box.ondragover = function(e){
                e.preventDefault();      //阻止默认事件,不让浏览器打开拖拽的文件
            }
            box.ondrop = function(e){
                this.innerText = '将文件拖拽至此';
                e.preventDefault();
    
                var fd = new FormData();
                fd.set('user',$('#user').val());
                fd.set('pass',$('#pass').val());
                Array.from(e.dataTransfer.files).forEach((file)=>{ 
            //files是类数组,先转数组,在逐个append进fd fd.append(
    'file',file) }) var xhr = new XMLHttpRequest(); xhr.open('POST','http://127.0.0.1:8080/upload'); xhr.upload.addEventListener('progress',(e)=>{ //要监听xhr.upload的事件就要使用原生的,且在send前绑定事件,即xhr.readyState状态相关
              //xhr 本身也可以监听 progress事件,这个事件是监听 请求返回的,存在相同的event--------ajax一般不监听返回进度
    var percent = Math.floor(e.loaded /e.total * 100); $('#prog').attr('value',percent) console.log(percent) }) xhr.send(fd) xhr.onreadystatechange = function(){ console.log(xhr.readyState,xhr.status) if(xhr.readyState == 4 && xhr.status == 200){ console.log('ajax done') console.log(xhr.responseText) } } } box.ondragleave = function(){ this.innerText = '将文件拖拽至此'; } </script> </body> </html>

    2. server.js

    const express = require('express');
    const multer = require('multer');
    const body_parser = require('body-parser');
    
    const fs = require('fs');
    
    let server = new express();
    server.use(body_parser.urlencoded({extended:false}))  //使用body-parser中间件
    let multerObj = multer({dest:'./upload/'});        //配置multer将上传的文件放到  ./upload
    server.use(multerObj.any());                 //使用multer中间件
    
    server.listen(8080);
    
    
    server.post('/upload',(req,res)=>{
        // console.log(req.body);      //body-parser  使 req有body属性获取提交的普通数据
        // console.log(req.files)      //multer    使 req有files属性获取文件
        res.end('success')
    })
    
    server.use(express.static('./www'))  //express的静态目录  为  ./www

    3. 效果

  • 相关阅读:
    [声明]博主退役了
    galgame(s?)
    atcoder grand contest 040 F Two Pieces
    AtCoder Grand Contest 040 E
    【AtCoder】CODE FESTIVAL 2016 qual C E-順列辞書 / Encyclopedia of Permutations
    GMOJ6282 向量
    [GMOJ6281] 串
    GMOJ 5909 跑商
    2019.10.28 GMOJ 6394 燃烧的火焰
    题解 CF1092B 【Teams Forming】
  • 原文地址:https://www.cnblogs.com/96weibin/p/12169016.html
Copyright © 2011-2022 走看看