最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

uniapp項目實踐封裝通用請求上傳以及下載方法總結(jié)

 更新時間:2023年09月14日 11:13:09   作者:MarkGuan  
在日常開發(fā)過程中,前端經(jīng)常要和后端進(jìn)行接口聯(lián)調(diào),獲取并且渲染數(shù)據(jù)到頁面中,接下來就總結(jié)一下?uniapp?中獲取請求、文件下載和上傳的一些方法

原理分析

主要是使用uni.request方法來發(fā)送請求,uni.downloadFile方法來下載文件,uni.uploadFile方法來上傳文件。

以下方法存于根目錄下的scripts文件夾下的http.js文件中。

方法實現(xiàn)

接下來一一說明如何實現(xiàn)數(shù)據(jù)請求、文件下載以及文件的上傳的方法封裝。

數(shù)據(jù)請求

這個方法要接收一些參數(shù),和現(xiàn)有默認(rèn)參數(shù)合并,然后傳給請求 API,獲取數(shù)據(jù)后使用try...catch來處理成功和失敗。

這里要引入一些文件,包括請求的域名和地址,以及一些通用方法,就先省略了,接口可以到網(wǎng)上找一下公共的,或者自己使用 node 搭建一個簡易的接口服務(wù)器。

// 網(wǎng)絡(luò)請求
async function request(options) {
  let isHttp = options.url.indexOf("http") > -1;
  let url = isHttp ? options.url : `${urls.baseUrl}${options.url}`;
  let defultOptions = {
    url,
    method: options.method || "get",
    data: options.data || null,
    timeout: options.timeout || 30000,
    dataType: options.dataType || "json",
    header: options.header || {
      "Content-Type": "application/json",
    },
    sslVerify: options.sslVerify || false,
  };
  let params = { ...options, ...defultOptions };
  console.log("請求參數(shù):", params);
  try {
    let result = await uni.request(params);
    if (result.statusCode === 200) {
      return result.data;
    } else {
      return {
        code: 102,
        msg: "get_fail",
        data: {
          info: result.errMsg,
        },
      };
    }
    return result;
  } catch (e) {
    return {
      code: 101,
      msg: "get_fail",
      data: {
        info: e,
      },
    };
  }
}

文件下載

這個就和請求一樣,只不過 API 不一樣,看一下內(nèi)容。

// 下載文件
async function download(options) {
  let isHttp = options.url.indexOf("http") > -1;
  let url = isHttp ? options.url : `${urls.baseUrl}${options.url}`;
  let defultOptions = {
    url,
    timeout: options.timeout || 30000,
    header: options.header || {},
    filePath: options.filePath,
  };
  let params = { ...options, ...defultOptions };
  console.log("下載參數(shù):", params);
  try {
    let result = await uni.downloadFile(params);
    if (result.statusCode === 200) {
      return result.tempFilePath;
    } else {
      return {
        code: 102,
        msg: "download_fail",
        data: {
          info: result.errMsg,
        },
      };
    }
    return result;
  } catch (e) {
    return {
      code: 101,
      msg: "download_fail",
      data: {
        info: e,
      },
    };
  }
}

文件上傳

文件上傳同以上一樣,簡單封裝一下。

// 上傳文件
async function upload(options) {
  let isHttp = options.url.indexOf("http") > -1;
  let url = isHttp ? options.url : `${urls.baseUrl}${options.url}`;
  let defultOptions = {
    url,
    timeout: options.timeout || 30000,
    filePath: options.filePath || "",
    name: options.name || "file",
  };
  let params = { ...options, ...defultOptions };
  console.log("上傳參數(shù):", params);
  try {
    let result = await uni.uploadFile(params);
    if (result.statusCode === 200) {
      return JSON.parse(result.data);
    } else {
      return {
        code: 102,
        msg: "upload_fail",
        data: {
          info: result.errMsg,
        },
      };
    }
    return result;
  } catch (e) {
    //TODO handle the exception
    return {
      code: 101,
      msg: "upload_fail",
      data: {
        info: e,
      },
    };
  }
}

寫好以后記得導(dǎo)出方法。

實戰(zhàn)演練

模板內(nèi)容

  • 請求內(nèi)容
<view class="list-http">
  <button @click="sendReq">發(fā)起請求</button>
  <text class="list-http-txt">響應(yīng)內(nèi)容:{{ httpInfo.request }}</text>
</view>
  • 下載內(nèi)容
<!-- 下載圖片 -->
<view class="list-http">
  <button @click="downloadImg">下載圖片</button>
  <text class="list-http-txt">響應(yīng)內(nèi)容:</text>
  <image class="list-http-img" :src="httpInfo.imgUrl" mode="widthFix"></image>
</view>
<!-- 下載文件 -->
<view class="list-http">
  <button @click="downloadFile">下載文件</button>
  <text class="list-http-txt">響應(yīng)內(nèi)容:{{ httpInfo.fileUrl }}</text>
</view>
  • 上傳內(nèi)容
<!-- 上傳圖片 -->
<view class="list-http">
  <button @click="uploadImg">上傳圖片</button>
  <text class="list-http-txt">響應(yīng)內(nèi)容:</text>
  <image
    class="list-http-img"
    :src="httpInfo.uploadImgUrl"
    mode="widthFix"
  ></image>
</view>
<!-- 上傳文件 -->
<!-- #ifdef H5 || MP-WEIXIN -->
<view class="list-http">
  <uni-file-picker
    ref="files"
    :auto-upload="false"
    limit="1"
    title="最多選擇1個文件"
    file-mediatype="all"
    mode="list"
    @select="fileSelect"
    @progress="fileProgress"
    @success="fileSuccess"
    @fail="fileFail"
  ></uni-file-picker>
  <text class="list-http-txt">響應(yīng)內(nèi)容:{{ httpInfo.uploadFileUrl }}</text>
</view>
<!-- #endif -->

腳本方法

  • 定義數(shù)據(jù)
let httpInfo = reactive({
  request: null,
  imgUrl: "",
  fileUrl: "",
  uploadImgUrl: "",
  uploadFileUrl: "",
});
  • 請求方法
// 請求內(nèi)容
async function sendReq() {
  let opts = {
    url: proxy.$apis.urls.food,
    method: "get",
  };
  let data = await proxy.$http.request(opts);
  if (data.code == 200) {
    httpInfo.request = JSON.stringify(data.data.list);
  }
  console.log("請求內(nèi)容:", data);
}
  • 下載圖片
// 下載圖片
async function downloadImg() {
  let opts = {
    url: proxy.$apis.urls.img,
  };
  let data = await proxy.$http.download(opts);
  if (data) {
    httpInfo.imgUrl = data;
  }
}
  • 下載文件
// 下載文件
async function downloadFile() {
  let opts = {
    url: proxy.$apis.urls.txt,
  };
  let data = await proxy.$http.download(opts);
  console.log(data);
  if (data) {
    httpInfo.fileUrl = data;
  }
}
  • 上傳圖片
// 上傳圖片
async function uploadImg() {
  uni.chooseImage({
    complete(res) {
      if (res.tempFiles) {
        let file = res.tempFiles[0];
        uploadSet(file.path);
      }
    },
  });
}
  • 上傳文件
// 上傳文件

// 獲取上傳狀態(tài)
function fileSelect(e) {
  console.log("選擇文件:", e);
  if (e.tempFiles) {
    let file = e.tempFiles[0];
    uploadSet(file.path, "file");
  }
}

// 獲取上傳進(jìn)度
function fileProgress(e) {
  console.log("上傳進(jìn)度:", e);
}

// 上傳成功
function fileSuccess(e) {
  console.log("上傳成功");
}

// 上傳失敗
function fileFail(e) {
  console.log("上傳失?。?, e);
}
  • 上傳操作
// 上傳操作
async function uploadSet(filePath, type = "img") {
  let opts = {
    url: proxy.$apis.urls.upload,
    filePath,
  };
  let data = await proxy.$http.upload(opts);
  if (data.code == 200) {
    httpInfo[type == "img" ? "uploadImgUrl" : "uploadFileUrl"] = data.data.url;
    httpInfo.fileName = data.data.filename;
  } else {
    uni.showToast({
      title: data.data.info,
      icon: "error",
    });
  }
}

案例展示

請求方法預(yù)覽

文件下載預(yù)覽

下載圖片

下載文件

文件上傳預(yù)覽

上傳圖片

上傳文件

最后

以上就是封裝通用請求上傳以及下載方法的主要內(nèi)容,更多關(guān)于uniapp封裝請求上傳下載的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript簡單實現(xiàn)鼠標(biāo)拖動選擇功能

    JavaScript簡單實現(xiàn)鼠標(biāo)拖動選擇功能

    本篇文章主要是對JavaScript簡單實現(xiàn)鼠標(biāo)拖動選擇功能的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • Javascript 判斷客戶端瀏覽器類型代碼

    Javascript 判斷客戶端瀏覽器類型代碼

    有時候一些js代碼并不希望在別的瀏覽器下運行,就需要事先判斷一下,方便下面的操作。
    2010-03-03
  • JavaScript數(shù)組去重實現(xiàn)方法小結(jié)

    JavaScript數(shù)組去重實現(xiàn)方法小結(jié)

    這篇文章主要介紹了JavaScript數(shù)組去重實現(xiàn)方法,結(jié)合實例形式總結(jié)分析了JavaScript數(shù)組去重ES3、ES5及ES6常見實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • js實現(xiàn)隨機點名器精簡版

    js實現(xiàn)隨機點名器精簡版

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)隨機點名器的精簡版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 微信小程序保持session會話的方法

    微信小程序保持session會話的方法

    這篇文章主要介紹了微信小程序保持session會話的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 教你用javascript實現(xiàn)隨機標(biāo)簽云效果_附代碼

    教你用javascript實現(xiàn)隨機標(biāo)簽云效果_附代碼

    下面小編就為大家?guī)硪黄棠阌胘avascript實現(xiàn)隨機標(biāo)簽云效果_附代碼。小編覺得很實用,現(xiàn)在分享給大家。給大家一個參考
    2016-03-03
  • 使用雪花算法產(chǎn)生id導(dǎo)致前端精度缺失問題解決方案

    使用雪花算法產(chǎn)生id導(dǎo)致前端精度缺失問題解決方案

    雪花算法由Twitter提出,設(shè)計目的是生成唯一的、遞增的ID,下面這篇文章主要介紹了使用雪花算法產(chǎn)生id導(dǎo)致前端精度缺失問題的解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-05-05
  • uniapp封裝小程序雷達(dá)圖組件的完整代碼

    uniapp封裝小程序雷達(dá)圖組件的完整代碼

    組件是一個單獨且可復(fù)用的功能模塊的封裝,每個組件,包括如下幾個部分:以組件名稱為標(biāo)記的開始標(biāo)簽和結(jié)束標(biāo)簽、組件內(nèi)容、組件屬性、組件屬性值,這篇文章主要給大家介紹了關(guān)于uniapp封裝小程序雷達(dá)圖組件的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Javascript函數(shù)的參數(shù)

    Javascript函數(shù)的參數(shù)

    本文給大家分享的是網(wǎng)易云課堂中金旭亮老師的課堂筆記,對于大家學(xué)習(xí)javascript非常有幫助,這里推薦給小伙伴們
    2015-07-07
  • 傳參安全處理window.btoa base64加密,線性對稱加密

    傳參安全處理window.btoa base64加密,線性對稱加密

    這篇文章主要介紹了傳參安全處理window.btoa base64加密,線性對稱加密,需要的朋友可以參考下
    2023-07-07

最新評論

刚察县| 乃东县| 开阳县| 永兴县| 和林格尔县| 巴东县| 宿州市| 榕江县| 盘山县| 昌邑市| 阜新市| 香格里拉县| 景宁| 雅安市| 临邑县| 呼伦贝尔市| 射阳县| 平原县| 波密县| 淮北市| 高州市| 托克逊县| 潢川县| 名山县| 隆安县| 汉寿县| 新宁县| 南城县| 重庆市| 海原县| 保德县| 西乡县| 东光县| 乐清市| 河北省| 林周县| 万载县| 穆棱市| 泸西县| 增城市| 张家川|