微信小程序API 上傳、下載

2022-05-11 16:17 更新

wx.uploadFile(OBJECT)


將本地資源上傳到開(kāi)發(fā)者服務(wù)器。如頁(yè)面通過(guò) wx.chooseImage 等接口獲取到一個(gè)本地資源的臨時(shí)文件路徑后,可通過(guò)此接口將本地資源上傳到指定服務(wù)器??蛻舳税l(fā)起一個(gè)HTTPS POST請(qǐng)求,其中Content-Typemultipart/form-data。

OBJECT參數(shù)說(shuō)明:

參數(shù) 類(lèi)型 必填 說(shuō)明
url String 開(kāi)發(fā)者服務(wù)器url
filePath String 要上傳文件資源的路徑
name String 文件對(duì)應(yīng)的key , 開(kāi)發(fā)者在服務(wù)器端通過(guò)這個(gè)key可以獲取到文件二進(jìn)制內(nèi)容
header Object HTTP 請(qǐng)求 Header,header中不能設(shè)置Referer
formData Object HTTP 請(qǐng)求中其他額外的form data
success Function 接口調(diào)用成功的回調(diào)函數(shù)
fail Function 接口調(diào)用失敗的回調(diào)函數(shù)
complete Function 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)

success返回參數(shù)說(shuō)明:

參數(shù) 類(lèi)型 說(shuō)明
data String 開(kāi)發(fā)者服務(wù)器返回的數(shù)據(jù)
statusCode Number HTTP狀態(tài)碼

示例代碼:

wx.chooseImage({
  success:function(res){
    var tempFilePaths = res.tempFilePaths
    wx.uploadFile({
      url: 'http://example.weixin.qq.com/upload', //僅為示例,非真實(shí)的接口地址
      filePath: tempFilePaths[0],
      name:"file",
      formData:{
        "user":"test"
      }      success: function(res){        var data = res.data        //do something      }
    })
  }
})

返回值:

基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理。

返回一個(gè)uploadTask對(duì)象,通過(guò)uploadTask,可監(jiān)聽(tīng)上傳進(jìn)度變化事件,以及取消上傳任務(wù)。

uploadTask

基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理。

一個(gè)可以監(jiān)聽(tīng)上傳進(jìn)度變化事件,以及取消上傳任務(wù)的對(duì)象

方法:

UploadTask.abort()

基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理。

中斷上傳任務(wù)


UploadTask.offHeadersReceived(function callback)

基礎(chǔ)庫(kù) 2.1.0 開(kāi)始支持,低版本需做兼容處理

取消監(jiān)聽(tīng) HTTP Response Header 事件

參數(shù)

function callback

HTTP Response Header 事件的回調(diào)函數(shù)


UploadTask.offProgressUpdate(function callback)

基礎(chǔ)庫(kù) 2.1.0 開(kāi)始支持,低版本需做兼容處理。

取消監(jiān)聽(tīng)上傳進(jìn)度變化事件

參數(shù)

function callback

上傳進(jìn)度變化事件的回調(diào)函數(shù)


UploadTask.onHeadersReceived(function callback)

基礎(chǔ)庫(kù) 2.1.0 開(kāi)始支持,低版本需做兼容處理。

監(jiān)聽(tīng) HTTP Response Header 事件。會(huì)比請(qǐng)求完成事件更早

參數(shù)

function callback

HTTP Response Header 事件的回調(diào)函數(shù)

參數(shù)

Object res
屬性 類(lèi)型 說(shuō)明
header Object 開(kāi)發(fā)者服務(wù)器返回的 HTTP Response Header


UploadTask.onProgressUpdate(function callback)

基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理

監(jiān)聽(tīng)上傳進(jìn)度變化事件

參數(shù)

function callback

上傳進(jìn)度變化事件的回調(diào)函數(shù)

參數(shù)

Object res
屬性 類(lèi)型 說(shuō)明
progress number 上傳進(jìn)度百分比
totalBytesSent number 已經(jīng)上傳的數(shù)據(jù)長(zhǎng)度,單位 Bytes
totalBytesExpectedToSend number 預(yù)期需要上傳的數(shù)據(jù)總長(zhǎng)度,單位 Bytes


示例代碼:

const uploadTask = wx.uploadFile({
    url: 'http://example.weixin.qq.com/upload', //僅為示例,非真實(shí)的接口地址
    filePath: tempFilePaths[0],
    name: 'file',
    formData:{
        'user': 'test'
    },
    success: function(res){
        var data = res.data
        //do something
    }
})

uploadTask.onProgressUpdate((res) => {
    console.log('上傳進(jìn)度', res.progress)
    console.log('已經(jīng)上傳的數(shù)據(jù)長(zhǎng)度', res.totalBytesSent)
    console.log('預(yù)期需要上傳的數(shù)據(jù)總長(zhǎng)度', res.totalBytesExpectedToSend)
})

uploadTask.abort() // 取消上傳任務(wù)

Bug & Tip

  1. tip: 最大并發(fā)限制是 10 個(gè)
  2. tip: 默認(rèn)超時(shí)時(shí)間和最大超時(shí)時(shí)間都是 60s


wx.downloadFile(OBJECT)

下載文件資源到本地。客戶端直接發(fā)起一個(gè)HTTP GET請(qǐng)求,返回文件的本地臨時(shí)路徑。

參數(shù)

Object object

屬性 類(lèi)型 默認(rèn)值 必填 說(shuō)明 最低版本
url string 下載資源的 url
header Object HTTP 請(qǐng)求的 Header,Header 中不能設(shè)置 Referer
timeout number 超時(shí)時(shí)間,單位為毫秒 2.10.0
filePath string 指定文件下載后存儲(chǔ)的路徑 (本地路徑) 1.8.0
success function 接口調(diào)用成功的回調(diào)函數(shù)
fail function 接口調(diào)用失敗的回調(diào)函數(shù)
complete function 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)

object.success 回調(diào)函數(shù)

參數(shù)
Object res
屬性 類(lèi)型 說(shuō)明 最低版本
tempFilePath string 臨時(shí)文件路徑 (本地路徑)。沒(méi)傳入 filePath 指定文件存儲(chǔ)路徑時(shí)會(huì)返回,下載后的文件會(huì)存儲(chǔ)到一個(gè)臨時(shí)文件
filePath string 用戶文件路徑 (本地路徑)。傳入 filePath 時(shí)會(huì)返回,跟傳入的 filePath 一致
statusCode number 開(kāi)發(fā)者服務(wù)器返回的 HTTP 狀態(tài)碼
profile Object 網(wǎng)絡(luò)請(qǐng)求過(guò)程中一些調(diào)試信息 2.10.4

res.profile 的結(jié)構(gòu)

屬性 類(lèi)型 說(shuō)明
redirectStart number 第一個(gè) HTTP 重定向發(fā)生時(shí)的時(shí)間。有跳轉(zhuǎn)且是同域名內(nèi)的重定向才算,否則值為 0
redirectEnd number 最后一個(gè) HTTP 重定向完成時(shí)的時(shí)間。有跳轉(zhuǎn)且是同域名內(nèi)部的重定向才算,否則值為 0
fetchStart number 組件準(zhǔn)備好使用 HTTP 請(qǐng)求抓取資源的時(shí)間,這發(fā)生在檢查本地緩存之前
domainLookupStart number DNS 域名查詢開(kāi)始的時(shí)間,如果使用了本地緩存(即無(wú) DNS 查詢)或持久連接,則與 fetchStart 值相等
domainLookupEnd number DNS 域名查詢完成的時(shí)間,如果使用了本地緩存(即無(wú) DNS 查詢)或持久連接,則與 fetchStart 值相等
connectStart number HTTP(TCP) 開(kāi)始建立連接的時(shí)間,如果是持久連接,則與 fetchStart 值相等。注意如果在傳輸層發(fā)生了錯(cuò)誤且重新建立連接,則這里顯示的是新建立的連接開(kāi)始的時(shí)間
connectEnd number HTTP(TCP) 完成建立連接的時(shí)間(完成握手),如果是持久連接,則與 fetchStart 值相等。注意如果在傳輸層發(fā)生了錯(cuò)誤且重新建立連接,則這里顯示的是新建立的連接完成的時(shí)間。注意這里握手結(jié)束,包括安全連接建立完成、SOCKS 授權(quán)通過(guò)
SSLconnectionStart number SSL建立連接的時(shí)間,如果不是安全連接,則值為 0
SSLconnectionEnd number SSL建立完成的時(shí)間,如果不是安全連接,則值為 0
requestStart number HTTP請(qǐng)求讀取真實(shí)文檔開(kāi)始的時(shí)間(完成建立連接),包括從本地讀取緩存。連接錯(cuò)誤重連時(shí),這里顯示的也是新建立連接的時(shí)間
requestEnd number HTTP請(qǐng)求讀取真實(shí)文檔結(jié)束的時(shí)間
responseStart number HTTP 開(kāi)始接收響應(yīng)的時(shí)間(獲取到第一個(gè)字節(jié)),包括從本地讀取緩存
responseEnd number HTTP 響應(yīng)全部接收完成的時(shí)間(獲取到最后一個(gè)字節(jié)),包括從本地讀取緩存
rtt number 當(dāng)次請(qǐng)求連接過(guò)程中實(shí)時(shí) rtt
estimate_nettype string 評(píng)估的網(wǎng)絡(luò)狀態(tài) slow 2g/2g/3g/4g
httpRttEstimate number 協(xié)議層根據(jù)多個(gè)請(qǐng)求評(píng)估當(dāng)前網(wǎng)絡(luò)的 rtt(僅供參考)
transportRttEstimate number 傳輸層根據(jù)多個(gè)請(qǐng)求評(píng)估的當(dāng)前網(wǎng)絡(luò)的 rtt(僅供參考)
downstreamThroughputKbpsEstimate number 評(píng)估當(dāng)前網(wǎng)絡(luò)下載的kbps
throughputKbps number 當(dāng)前網(wǎng)絡(luò)的實(shí)際下載kbps
peerIP string 當(dāng)前請(qǐng)求的IP
port number 當(dāng)前請(qǐng)求的端口
socketReused boolean 是否復(fù)用連接
sendBytesCount number 發(fā)送的字節(jié)數(shù)
receivedBytedCount number 收到字節(jié)數(shù)

返回值

DownloadTask

基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理。

一個(gè)可以監(jiān)聽(tīng)下載進(jìn)度變化事件和取消下載的對(duì)象


示例代碼:

wx.downloadFile({
  url: 'https://example.com/audio/123', //僅為示例,并非真實(shí)的資源
  success (res) {
    // 只要服務(wù)器有響應(yīng)數(shù)據(jù),就會(huì)把響應(yīng)內(nèi)容寫(xiě)入文件并進(jìn)入 success 回調(diào),業(yè)務(wù)需要自行判斷是否下載到了想要的內(nèi)容
    if (res.statusCode === 200) {
      wx.playVoice({
        filePath: res.tempFilePath
      })
    }
  }
})



DownloadTask

基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理。

一個(gè)可以監(jiān)聽(tīng)下載進(jìn)度變化事件,以及取消下載任務(wù)的對(duì)象

方法:

DownloadTask.abort()

基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理。

中斷下載任務(wù)


DownloadTask.offHeadersReceived(function callback)

基礎(chǔ)庫(kù) 2.1.0 開(kāi)始支持,低版本需做兼容處理。

取消監(jiān)聽(tīng) HTTP Response Header 事件

參數(shù)

function callback

HTTP Response Header 事件的回調(diào)函數(shù)


DownloadTask.offProgressUpdate(function callback)

基礎(chǔ)庫(kù) 2.1.0 開(kāi)始支持,低版本需做兼容處理

取消監(jiān)聽(tīng)下載進(jìn)度變化事件

參數(shù)

function callback

下載進(jìn)度變化事件的回調(diào)函數(shù)

    DownloadTask.onHeadersReceived(function callback)

    基礎(chǔ)庫(kù) 2.1.0 開(kāi)始支持,低版本需做兼容處理。

    監(jiān)聽(tīng) HTTP Response Header 事件。會(huì)比請(qǐng)求完成事件更早

    參數(shù)

    function callback

    HTTP Response Header 事件的回調(diào)函數(shù)

    參數(shù)

    Object res
    屬性 類(lèi)型 說(shuō)明
    header Object 開(kāi)發(fā)者服務(wù)器返回的 HTTP Response Header

    DownloadTask.onProgressUpdate(function callback)

    基礎(chǔ)庫(kù) 1.4.0 開(kāi)始支持,低版本需做兼容處理

    監(jiān)聽(tīng)下載進(jìn)度變化事件

    參數(shù)

    function callback

    下載進(jìn)度變化事件的回調(diào)函數(shù)

    參數(shù)

    Object res
    屬性 類(lèi)型 說(shuō)明
    progress number 下載進(jìn)度百分比
    totalBytesWritten number 已經(jīng)下載的數(shù)據(jù)長(zhǎng)度,單位 Bytes
    totalBytesExpectedToWrite number 預(yù)期需要下載的數(shù)據(jù)總長(zhǎng)度,單位 Bytes


    以上內(nèi)容是否對(duì)您有幫助:
    在線筆記
    App下載
    App下載

    掃描二維碼

    下載編程獅App

    公眾號(hào)
    微信公眾號(hào)

    編程獅公眾號(hào)