GVKun编程网logo

如何在axios中获取onUploadProgress?(axios如何获取数据)

16

本文的目的是介绍如何在axios中获取onUploadProgress?的详细情况,特别关注axios如何获取数据的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解如何

本文的目的是介绍如何在axios中获取onUploadProgress?的详细情况,特别关注axios如何获取数据的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解如何在axios中获取onUploadProgress?的机会,同时也不会遗漏关于Ajax Upload; A file upload script with progress-bar, drag-and-drop、Ajax 文件上传进度监听之upload.onprogress案例详解、axios onDownloadProgress和onUploadProgress配置进度条、axios onUploadProgress + Vue?的知识。

本文目录一览:

如何在axios中获取onUploadProgress?(axios如何获取数据)

如何在axios中获取onUploadProgress?(axios如何获取数据)

我对如何使用axios上传进度事件感到有些困惑。实际上,我正在将大量文件存储到AWS
s3中。为此,如何获得上传进度?我需要这个功能onUploadProgress

目前,我的发帖请求是这样的:

export function uploadtoCdnAndSaveToDb(data) {    return dispatch => {        dispatch(showUnderLoader(true));        return axios.post(''/posttodb'', {data:data},        ).then((response) => {            console.log(response.data)        })    }}

答案1

小编典典

Axios存储库中有一个明确的示例,说明了如何执行此操作:https
:
//github.com/mzabriskie/axios/blob/master/examples/upload/index.html

网站摘录

使用axios发出请求时,可以传入请求配置。该请求配置的一部分是上载进度时调用的函数。

const config = {    onUploadProgress: progressEvent => console.log(progressEvent.loaded)}

当您使用axios发出请求时,可以传入此配置对象。

axios.put(''/upload/server'', data, config)

每当上传进度更改时,就会调用此函数。

只是关于您的代码的注释

我还注意到您没有充分利用ES6!

对象声明

对于这样的东西,它有一些不错的语法,例如,您定义了一个对象:{ data: data },但是{ data }足够了。

可能需要使用带有一些掉毛规则的短绒棉,最常见的是AirBnB样式指南

Ajax Upload; A file upload script with progress-bar, drag-and-drop

Ajax Upload; A file upload script with progress-bar, drag-and-drop

总结

以上是小编为你收集整理的Ajax Upload; A file upload script with progress-bar, drag-and-drop全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Ajax 文件上传进度监听之upload.onprogress案例详解

Ajax 文件上传进度监听之upload.onprogress案例详解

$.ajax实现

<!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>Document</title>
    <script src="./libs/jquery/jquery.js"></script>
    <style>
      div {
        width: 0%;
        height: 20px;
        background-color: #f00;
        /* transition: all 0.2s; */
      }
    </style>
  </head>
  <body>
    <div></div>
    <input type="file" />
    <script>
      $(function() {
        // 用户选择好文件之后单击弹出层的“打开”按钮的触发事件是:change
        $(''input'').on(''change'', function() {
          // 1.收集文件数据
          let myfile = $(''input'')[0].files[0]
          let formdata = new FormData()
          formdata.append(''file_data'', myfile)

          // 2.发起ajax请求
          $.ajax({
            url: ''http://127.0.0.1:3001/uploadFile'',
            type: ''post'',
            data: formdata,
            processData: false,
            contentType: false,
            xhr: function() {
              let newxhr = new XMLHttpRequest()
              // 添加文件上传的监听
              // onprogress:进度监听事件,只要上传文件的进度发生了变化,就会自动的触发这个事件
              newxhr.upload.onprogress = function(e) {
                console.log(e)
                let percent = (e.loaded / e.total) * 100 + ''%''
                $(''div'').css(''width'', percent)
              }
              return newxhr
            },
            success: function(res) {
              console.log(res)
            },
            dataType: ''json''
          })
        })
      })
    </script>
  </body>
</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>Document</title>
    <script src="./libs/jquery/jquery.js"></script>
    <style>
      div {
        width: 0%;
        height: 20px;
        background-color: #f00;
        /* transition: all 0.2s; */
      }
    </style>
  </head>
  <body>
    <div></div>
    <input type="file" />
    <script>
      $(function() {
        // 用户选择好文件之后单击弹出层的“打开”按钮的触发事件是:change
        $(''input'').on(''change'', function() {
          // 1.收集文件数据
          let myfile = $(''input'')[0].files[0]
          let formdata = new FormData()
          formdata.append(''file_data'', myfile)

          let xhr = new XMLHttpRequest()

          xhr.open(''post'', ''http://127.0.0.1:3001/uploadFile'')

          // 细节1:文件上传,如果使用fromdata,则不要设置请求头
          xhr.upload.onprogress = function(e) {
            console.log(e)
            let percent = (e.loaded / e.total) * 100 + ''%''
            $(''div'').css(''width'', percent)
          }
          // 细节2:send中可以直接传递formdata
          xhr.send(formdata)
        })
      })
    </script>
  </body>
</html>

到此这篇关于Ajax 文件上传进度监听之upload.onprogress案例详解的文章就介绍到这了,更多相关Ajax 文件上传进度监听之upload.onprogress内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • JFinal使用ajaxfileupload实现图片上传及预览
  • ajaxfileupload.js实现上传文件功能
  • AjaxFileUpload.js实现异步上传文件功能
  • springMVC使用ajaxFailUpload上传图片的方法
  • AjaxUpLoad.js实现文件上传

axios onDownloadProgress和onUploadProgress配置进度条

axios onDownloadProgress和onUploadProgress配置进度条

先来个简单的例子试试水

1 axios({
2   url: ''https://www.***.com/***.png'',
3   method: ''get'',
4   onDownloadProgress (progress) {
5     console.log(Math.round(progress.loaded / progress.total * 100) + ''%'');
6   }
7 })

上面的代码添加了一个简单的axios请求,使用get方法请求一张图片,然后以百分比的形式打印出我们从服务器下载这张图片的进度,大家可以把 url 参数换成一张比较大的图片链接试试。

用了上面的例子应该就对这个下载请求进度调有所掌握了,但我们经常是将axios封装之后使用的,如果是这样该怎么添加进度条呢?也很简单,看下面例子

先使用 axios 定义post 请求,并将第三个参数作为配置项传入

 1 const httpPost = (URL, params, config = {}) => {
 2   return axios({
 3     url: URL,
 4     method: ''post'',
 5     data: {
 6       ...params
 7     },
 8     ...config
 9   })
10 }

在其他地方使用这个post请求并添加进度条

httpPost(''http://hah.com'', {}, {
  onUploadProgress (progress) {
    console.log(Math.round(progress.loaded / progress.total * 100) + ''%'');
  }
})

可以看到这里用的是  onUploadProgress ,为什么呢?也很简单,我们平时是使用 post 请求来上传数据,使用 get 请求来下载数据。

好了,以上!

 

 

 

axios onUploadProgress + Vue?

axios onUploadProgress + Vue?

您遇到以下问题:

this不是您的vue实例。您是否尝试登录console.log(this)?我想它不会向您显示vue实例。

那么如何解决呢?好吧,.bind()您的Vue实例

onUploadProgress: function(progressEvent) {
   this.progress = Math.round( (progressEvent.loaded * 100) / progressEvent.total )
   console.log(this.progress)
}.bind(this)
,

发现了问题;像往常一样,使用vue时,您确实需要注意this

这是工作中的父组件代码:

let context = this
....
onUploadProgress: function(progressEvent) {
   context.progress = Math.round( (progressEvent.loaded * 100) / progressEvent.total )
}
,

在您的watch中设置immediate = true

watch: {
  progress: {
    immediate: true,handler (newValue,oldValue) {
      console.log(this.progress)
    }
  }
}
,

您可以这样做

const config = {
    ...
    onUploadProgress: progressEvent => {
        this.loadPercentage = Math.round((progressEvent.loaded * 100) / progressEvent.total);
    }
};

axios.post('/url',data,config);

loadPercentage -数据中

今天的关于如何在axios中获取onUploadProgress?axios如何获取数据的分享已经结束,谢谢您的关注,如果想了解更多关于Ajax Upload; A file upload script with progress-bar, drag-and-drop、Ajax 文件上传进度监听之upload.onprogress案例详解、axios onDownloadProgress和onUploadProgress配置进度条、axios onUploadProgress + Vue?的相关知识,请在本站进行查询。

本文标签: