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

uniapp項(xiàng)目實(shí)踐封裝通用請(qǐng)求上傳以及下載方法總結(jié)

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

原理分析

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

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

方法實(shí)現(xiàn)

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

數(shù)據(jù)請(qǐng)求

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

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

// 網(wǎng)絡(luò)請(qǐng)求
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("請(qǐng)求參數(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,
      },
    };
  }
}

文件下載

這個(gè)就和請(qǐng)求一樣,只不過(guò) 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,
      },
    };
  }
}

文件上傳

文件上傳同以上一樣,簡(jiǎn)單封裝一下。

// 上傳文件
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,
      },
    };
  }
}

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

實(shí)戰(zhàn)演練

模板內(nèi)容

  • 請(qǐng)求內(nèi)容
<view class="list-http">
  <button @click="sendReq">發(fā)起請(qǐng)求</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個(gè)文件"
    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: "",
});
  • 請(qǐng)求方法
// 請(qǐng)求內(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("請(qǐng)求內(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",
    });
  }
}

案例展示

請(qǐng)求方法預(yù)覽

文件下載預(yù)覽

下載圖片

下載文件

文件上傳預(yù)覽

上傳圖片

上傳文件

最后

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

相關(guān)文章

  • JavaScript簡(jiǎn)單實(shí)現(xiàn)鼠標(biāo)拖動(dòng)選擇功能

    JavaScript簡(jiǎn)單實(shí)現(xiàn)鼠標(biāo)拖動(dòng)選擇功能

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

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

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

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

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

    js實(shí)現(xiàn)隨機(jī)點(diǎn)名器精簡(jiǎn)版

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

    微信小程序保持session會(huì)話的方法

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

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

    下面小編就為大家?guī)?lái)一篇教你用javascript實(shí)現(xiàn)隨機(jī)標(biāo)簽云效果_附代碼。小編覺(jué)得很實(shí)用,現(xiàn)在分享給大家。給大家一個(gè)參考
    2016-03-03
  • 使用雪花算法產(chǎn)生id導(dǎo)致前端精度缺失問(wèn)題解決方案

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

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

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

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

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

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

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

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

最新評(píng)論

隆化县| 寿宁县| 陇南市| 汉川市| 通河县| 岳西县| 会理县| 滦平县| 竹山县| 淅川县| 湟中县| 浑源县| 浮山县| 房产| 正镶白旗| 分宜县| 舒城县| 宜兰县| 通化市| 陕西省| 龙江县| 富源县| 进贤县| 石景山区| 炉霍县| 罗源县| 和静县| 东乡| 福州市| 保山市| 河北省| 滨海县| 宁远县| 英超| 黑河市| 遂平县| 正宁县| 河西区| 长春市| 庆安县| 克山县|