您好,登錄后才能下訂單哦!
今天小編給大家分享一下微信小程序uploadFile接口如何實現文件上傳的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
我們默認使用創建新項目進行講解,在index.vue最上方寫入代碼
<template> <view > 上傳的文件名: <button type="primary" @click="upload()">點擊上傳</button> </view> </template>
通過前端點擊“點擊上傳”來調用對應的方法
創建后運行如下
①uniapp必須用template標簽嵌套
否則
②小程序點擊事件用bindtap 而uniapp用@click
③uniapp的方法需要放在methods: {}里面
接下來我們在剛剛創建測試的方法upload中進行修改,首先整個動作原理是:通過點擊按鈕觸發upload方法=》選擇文件獲取到本地的路徑=》上傳給服務器=》服務器返回上傳的文件名(上傳后隨機生成的)
了解到整個流程后我們先將 文件進行選擇
uni.chooseImage示例
uni.chooseImage({ success: (chooseImageRes) => { const tempFilePaths = chooseImageRes.tempFilePaths; console.log(tempFilePaths); } });
將代碼放在unload中運行測試
可以看到已經生成了臨時的文件
接下來我們通過uni.uploadFile
方法完成對文件的上傳
uni.uploadFile示例
uni.uploadFile({ url: 'https://www.example.com/upload', //僅為示例,非真實的接口地址 filePath: tempFilePaths[0], name: 'file', formData: { 'user': 'test' }, success: (uploadFileRes) => { console.log(uploadFileRes.data); } });
在寫事件前,我通過在服務器上新建一個php文件作為文件上傳的接口
新建tp_imgsrc.php
考慮到大多數初學者這里決定用原生php進行開發
<?php // 上傳圖片 function uploadimg() { $file = $_FILES['file']; if ($file) { //var_dump($file); // 獲取文件后綴名 $ext = pathinfo($file['name'], PATHINFO_EXTENSION); $target = 'upload/' . uniqid() . '.' . $ext; // 轉移圖片地址 if (!move_uploaded_file($file['tmp_name'], $target)) { $GLOBALS['error_message'] = '上傳圖片失敗'; echo error_message; } die( json_encode( array( 'errCode' => 0, 'error_message'=>'圖片上傳成功', 'file'=>$target ),480) ); } } uploadimg();
完成后整個目錄是這樣的(層級關系)
接下來 我們將剛剛的上傳接口uni.uploadFile
與文件選擇接口uni.chooseImage
合并一下完成整個流程,也就是選擇文件完成后,將選擇的文件上傳
我們在upload方法中寫入
let that=this; console.log("我被點擊了"); uni.chooseImage({ success: (chooseImageRes) => { const tempFilePaths = chooseImageRes.tempFilePaths; console.log(tempFilePaths); uni.uploadFile({ url: 'https://你的接口地址/tp_imgsrc.php', //僅為示例,非真實的接口地址 filePath: tempFilePaths[0], name: 'file', formData: { }, success: (uploadFileRes) => { console.log(uploadFileRes.data); } }); } });
測試運行看看
返回了文件名和我自己定義的返回碼
可以看到服務器上也是存在這個文件的
最重要的步驟我們已經做完了,那上傳成功是不是得告訴下上傳的用戶告訴他們上傳成功了?
于是我們需要做一下判斷,當errCode==0的時候高速用戶上傳成功
但是發現了個問題,php返回的是數組,為啥到uniapp返回的是字符串?
指導我看了下官方的文檔
返回的是字符類型
解決辦法:
let param_json = JSON.stringify(this.$data)//轉為字符串 let bookkeeping_data = JSON.parse(bookkeeping_data_string)//轉換為JSON
測試后完美解決
改動到的代碼
let json_data = JSON.parse(uploadFileRes.data) console.log(json_data['errCode']);
接下來就可以將信息告訴用戶是否上傳成功了
uni.showToast示例
uni.showToast({ title: '標題', icon:'none' duration: 2000 });
相應的代碼:
let json_data = JSON.parse(uploadFileRes.data) console.log(json_data['errCode']); if (json_data['errCode']==0) { uni.showToast({ title: json_data['error_message'], icon:'none', duration: 2000 }); } else{ }
測試截圖
完整的index.vue
<template> <view > 上傳的文件名: <button type="primary" @click="upload">點擊上傳</button> </view> </template> <script> export default { data() { return { title: 'Hello' } }, onLoad() { let that=this; uni.request({ url: 'https://api.uomg.com/api/qq.info', //僅為示例,并非真實接口地址。 data: { qq: '504113939' }, header: { 'Content-Type': 'application/json;charset=UTF-8' //自定義請求頭信息 }, success: (res) => { console.log(res.data); } }); }, methods: { upload(){ let that=this; console.log("我被點擊了"); uni.chooseImage({ success: (chooseImageRes) => { const tempFilePaths = chooseImageRes.tempFilePaths; console.log(tempFilePaths); uni.uploadFile({ url: 'https:/你的接口/tp_imgsrc.php', //僅為示例,非真實的接口地址 filePath: tempFilePaths[0], name: 'file', formData: { }, success: (uploadFileRes) => { let json_data = JSON.parse(uploadFileRes.data) console.log(json_data['errCode']); if (json_data['errCode']==0) { uni.showToast({ title: json_data['error_message'], icon:'none', duration: 2000 }); } else{ } } }); } }); }, } } </script> <style> .content { display: flex; flex-direction: column; align-items: center; justify-content: center; } .logo { height: 200rpx; width: 200rpx; margin-top: 200rpx; margin-left: auto; margin-right: auto; margin-bottom: 50rpx; } .text-area { display: flex; justify-content: center; } .title { font-size: 36rpx; color: #8f8f94; } </style>
以上就是“微信小程序uploadFile接口如何實現文件上傳”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。