小北微信小程序之(zhī)-- 添加照片(小程序圖片上(shàng)傳功能) - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 小程序相關 >

小北微信小程序之(zhī)-- 添加照片(小程序圖片上(shàng)傳功能)

發表時(shí)間:2022-9-6

發布人(rén):融晨科技

浏覽次數:305

在(zài)上(shàng)一篇中我們搞定了(le/liǎo)相冊的(de)新建和(hé / huò)列表功能,本節我們嘗試往相冊内傳圖功能,這(zhè)需要(yào / yāo)小程序和(hé / huò)服務器端的(de)雙重支持。

還是(shì)老規矩,我們先實現服務器端。

服務器端

我們需要(yào / yāo)數據庫的(de)支持,還記得第8篇說(shuō)的(de)那個(gè)photo數據表麽,在(zài)這(zhè)裏我們進行一次修改然後再新增一個(gè)表。

相冊表
存儲每次照片的(de)提交以(yǐ)及對本次提交的(de)備注。

相冊圖片表
實際存儲每個(gè)照片,包含圖片的(de)路徑等,其中photo_id爲(wéi / wèi)photo表的(de)主鍵ID。

現在(zài)有了(le/liǎo)數據表我們再做兩個(gè)控制器,分别用來(lái)服務于(yú)photo和(hé / huò)photo_item表。

接下來(lái)我們來(lái)計劃一下添加相片的(de)邏輯,看下圖。

當點擊了(le/liǎo)“提交”按鈕後,會新家一條photo記錄然後返回給小程序,小程序開始實際的(de)傳圖過程并攜帶新photo記錄的(de)id來(lái)填充photo_item表。

這(zhè)裏有一點要(yào / yāo)注意的(de),就(jiù)是(shì)針對于(yú)photo記錄的(de)新建直接使用yii2的(de)restful --- create 就(jiù)可以(yǐ)了(le/liǎo),但是(shì)對于(yú)傳圖不(bù)一樣,涉及到(dào)接收圖片、存儲等等等等。

因此我們對PhotoItemController的(de)create方法進行了(le/liǎo)重寫,如下圖,這(zhè)裏也(yě)爲(wéi / wèi)你展示了(le/liǎo)yii2中restful如何重寫内置的(de)action。

然後我們自己定義一個(gè)create,看下圖。

通過yii2的(de)UploadedFile類來(lái)接收小程序過來(lái)的(de)圖片并且保持,同時(shí)建立一條記錄。
其中的(de)N8Folder::createItemPath主要(yào / yāo)用于(yú)生成有效的(de)物理路徑,感興趣的(de)可以(yǐ)在(zài)github倉庫上(shàng)看看。

ok,接下來(lái)我們來(lái)處理小程序端

小程序

在(zài)小程序端分兩步

  • 1、請求服務器POST /xcx/photos 新建一條photo記錄(所屬相冊、描述)

  • 2、新建photo記錄成功,攜帶文件請求POST /xcx/photo-items 新建一條photo_item記錄(所屬相冊ID、photoID、圖片路徑、類型等)

正式開始

新建一條photo記錄

這(zhè)個(gè)過程涉及到(dào)了(le/liǎo)一個(gè)小程序組件 -- picker,也(yě)就(jiù)是(shì)滾動選擇器,它能接收一個(gè)數組或對象數組,我們這(zhè)裏使用它來(lái)選擇所屬相冊,先看效果。

當頁面準備好後我們去服務器拿到(dào)相冊列表,看代碼。

代碼實現了(le/liǎo)如何把對象數據渲染成選擇器。

接下來(lái)我們就(jiù)可以(yǐ)提交數據新建photo了(le/liǎo),這(zhè)仍是(shì)一個(gè)表單事件formSubmit,當然爲(wéi / wèi)了(le/liǎo)體驗在(zài)用戶端并不(bù)會感覺到(dào)photo和(hé / huò)photo_item新建之(zhī)間的(de)差别,隻需點擊一次按鈕。

因此在(zài)提交表單時(shí)候我們需要(yào / yāo)對是(shì)否選擇了(le/liǎo)相冊以(yǐ)及是(shì)否傳圖進行判斷。

關于(yú)photo記錄的(de)建立并不(bù)複雜,我們之(zhī)前學過新建相冊,思路都一樣,POST /xcx/photos 即可,要(yào / yāo)說(shuō)的(de)是(shì)上(shàng)傳圖片,我們看下面的(de)代碼

在(zài)上(shàng)面的(de)代碼中涉及到(dào)一個(gè)循環,因爲(wéi / wèi)我可能一次選擇多個(gè)圖片然後點擊提交,所以(yǐ)核心是(shì)這(zhè)個(gè)uploadImage函數,我們來(lái)看一看它。

這(zhè)涉及到(dào)wx.uploadFile函數,這(zhè)是(shì)微信小程序内置的(de),用來(lái)上(shàng)傳一個(gè)文件,有幾個(gè)點要(yào / yāo)說(shuō)下

  • 綠色框 要(yào / yāo)上(shàng)傳文件資源的(de)路徑,也(yě)就(jiù)是(shì)我們相冊裏選擇的(de)圖片路徑。

  • 藍色框 文件對應的(de) key,在(zài)yii2上(shàng)通過這(zhè)個(gè)名字獲得文件對象。

  • 紅色框 有時(shí)候上(shàng)傳文件的(de)時(shí)候還需要(yào / yāo)一些其他(tā)數據,可以(yǐ)都放到(dào)formData内。

這(zhè)樣就(jiù)完成了(le/liǎo)上(shàng)傳圖片功能。

相關案例查看更多