zoukankan      html  css  js  c++  java
  • ajax 上传文件,监听进度(progress)

    mdn

    前端代码 github

    <body class="m-2">
      <label for="a" class="btn btn-primary">点击上传</label>
      <input id='a' name="file" type="file" accept="image/png, image/jpeg, video/*" style="display:none;" multiple='multiple'>
      <script>
        async function main() {
    
          const l = console.log
          let fileEle = document.querySelector('#a')
          fileEle.onchange = e => {
            let files = fileEle.files
            if(files.length === 0) return false;
    
            let data = new FormData()
            for(const file of files){
              data.append('files', file)
            }
    
            let xhr = new XMLHttpRequest()
            
            xhr.upload.addEventListener('progress', e => {
              if (e.lengthComputable) {
                var percentage = Math.round((e.loaded * 100) / e.total);
                l(`${percentage}%`)
              }
            })
    
            xhr.open('post', 'http://localhost:5000/upload')
            xhr.responseType = 'json'
            xhr.send(data)
    
            xhr.upload.addEventListener('loadstart', e => {
              l('上传开始')
            })
            
            xhr.upload.addEventListener('error', e => {
              l('上传失败')
            })
    
            xhr.upload.addEventListener('abort', e => {
              l('上传终止')
            })
    
            xhr.upload.addEventListener('timeout', e => {
              l('由于预设时间到期,上传终止')
            })
    
            xhr.upload.addEventListener('load', e => {
              l('上传成功了')
            })
    
            xhr.upload.addEventListener('loadend', e => {
              l('上传已经停止了')
            })
    
            xhr.onload = () => {
              l(...xhr.response.imgsSrc);
            }
    
          }
        }
        main();
      </script>
    </body>
    
    </html>
    

    后台代码片段

      @Post('upload')
      @UseInterceptors(FilesInterceptor('files'))
      uploadfile(@UploadedFiles() files, @Body() body) {
    
        if (!files || files.length === 0) {
          throw new HttpException('参数错误', HttpStatus.FORBIDDEN)
        }
    
        let imagesSrc = []
        for (const file of files) {
          const imgName = `${Date.now()}-${file.originalname}`
          const writeImage = createWriteStream(join(__dirname, '..', 'upload', imgName))
          writeImage.write(file.buffer)
          imagesSrc.push( `http://localhost:5000/images/${imgName}` )
        }
        return {
          imgsSrc: imagesSrc
        }
      }
    
  • 相关阅读:
    nodeJS入门01-http模块
    nodeJS入门-Buffer对象
    php与MySQL(php内置mysql函数)
    php与MySQL(基本操作)
    log4net
    js验证小数类型(浮点数)和整数类型
    牛腩学ASP.NET CORE做博客视频
    opencv再学习之路(八)---设定感兴趣区域(RIO)
    opencv再学习之路(四)---色彩分割得到二值图像
    opencv再学习之路(三)---形态学操作
  • 原文地址:https://www.cnblogs.com/ajanuw/p/9616098.html
Copyright © 2011-2022 走看看