欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)base64圖片下載(兼容IE10+)

    純javascript前端實現(xiàn)base64圖片下載(兼容IE10+)

    這篇文章主要介紹了純javascript前端實現(xiàn)base64圖片下載(兼容IE10+),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • JS簡單的圖片放大縮小的兩種方法

    JS簡單的圖片放大縮小的兩種方法

    這篇文章介紹了JS簡單的圖片放大縮小的兩種方法,有需要的朋友可以參考一下
    2013-11-11
  • JavaScrip中常用的HOOK腳本分享

    JavaScrip中常用的HOOK腳本分享

    Hook?技術(shù)又叫做鉤子函數(shù),簡單來說,就是把系統(tǒng)的程序拉出來變成我們自己執(zhí)行代碼片段,本文為大家整理了一些JavaScrip中常用的HOOK腳本,需要的可以參考下
    2024-12-12
  • js類型轉(zhuǎn)換與引用類型詳解(Boolean_Number_String)

    js類型轉(zhuǎn)換與引用類型詳解(Boolean_Number_String)

    本篇文章主要是對js中的類型轉(zhuǎn)換與引用類型(Boolean_Number_String)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • 淺析JavaScript 調(diào)試方法和技巧

    淺析JavaScript 調(diào)試方法和技巧

    本文給大家淺析javascript調(diào)試方法和技巧,涉及到j(luò)avascript調(diào)試方法和技巧方面的知識,本文介紹的非常詳細(xì),非常具有參考借鑒介紹,感興趣的朋友一起看看吧
    2015-10-10
  • JS中hasOwnProperty方法用法簡介

    JS中hasOwnProperty方法用法簡介

    hasOwnProperty(propertyName)方法 是用來檢測屬性是否為對象的自有屬性,如果是,返回true,否者false; 參數(shù)propertyName指要檢測的屬性名,這篇文章給大家介紹JS中hasOwnProperty方法用法簡介,感興趣的朋友一起看看吧
    2024-01-01
  • JavaScript進(jìn)制數(shù)之間的互相轉(zhuǎn)換

    JavaScript進(jìn)制數(shù)之間的互相轉(zhuǎn)換

    這篇文章主要介紹了JavaScript進(jìn)制數(shù)之間的互相轉(zhuǎn)換,進(jìn)制轉(zhuǎn)換是人們利用符號來計數(shù)的方法,下文基于JavaScript實現(xiàn)進(jìn)制數(shù)之間的轉(zhuǎn)換,有一定的知識性參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • IE6中使用position導(dǎo)致頁面變形的解決方案(js代碼)

    IE6中使用position導(dǎo)致頁面變形的解決方案(js代碼)

    IE6中使用position導(dǎo)致頁面變形,影響用戶體驗,通過搜索可以通過js來實現(xiàn)。
    2011-01-01
  • javascript根據(jù)時間生成m位隨機(jī)數(shù)最大13位

    javascript根據(jù)時間生成m位隨機(jī)數(shù)最大13位

    javascript根據(jù)時間生成m位隨機(jī)數(shù),最大13位隨機(jī)數(shù),并且不能保證首位不為0,實現(xiàn)代碼如下,需要的朋友可以參考下
    2014-10-10
  • 基于原生js實現(xiàn)判斷元素是否有指定class名

    基于原生js實現(xiàn)判斷元素是否有指定class名

    這篇文章主要介紹了基于原生js實現(xiàn)判斷元素是否有指定class名,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07

最新評論