nodeJs實現微信小程序的圖片上傳


今天我來介紹一下nodejs如何實現保存微信小程序傳過來的圖片及其返回

首先wx.uploadFile絕大部分時候是配合wx.chooseImage一起出現的,畢竟選擇好了圖片,再統一上傳是實現用戶圖片上傳的正常邏輯。

 1 //添加圖片
 2   addImg: function() {
 3     var that = this;
 4     console.log(9 - that.data.checkImgLength)
 5     if (9 - that.data.checkImgLength >= 1){
 6       wx.chooseImage({
 7         count: 9 - that.data.checkImgLength, // 默認9
 8         sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有
 9         sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有
10         success: function (res) {
11           var tempFilePaths = res.tempFilePaths//這里拿到的是圖片在微信客戶端的臨時路徑!!!
12           let length = tempFilePaths.length;
13           let tempList = that.data.imgLists.concat(tempFilePaths);//JSON數據
14           that.setData({
15             imgLists: tempList,
16             checkImgLength: that.data.checkImgLength + length//長度相加,這里是為了選擇的圖片不會超過9
17           })
18         }
19       })
20     }
21   },

這里要注意的是,第11行的路徑是臨時的,再刷新,這個路徑就無用了,甚至這個時候復制這個路徑到自己的瀏覽器里也沒有用,這里要注意,正確的業務邏輯是傳到自己的服務器,再保存到服務器,再由客戶端通過服務器鏈接拿到圖片。

下面是我的node服務器端的部分代碼

 1 var express = require("express");
 2 var formidable = require("formidable");
 3 var path = require("path")
 4 var fs = require("fs")
 5 var image = require("imageinfo")
 6 const listenNumber = 5000;
 7 
 8 var app = express();
 9 
10 app.use(express.static('upload'))//這個很重要,必須要這個才能拿到圖片鏈接,而不是進入路由,有興趣的同學可以刪掉試驗一下
11 
12 app.post("/upload", (req, res) => {
13     var form = new formidable.IncomingForm();//既處理表單,又處理文件上傳
14     //設置文件上傳文件夾/路徑,__dirname是一個常量,為當前路徑
15     let uploadDir = path.join(__dirname, "../upload/");
16     form.uploadDir = uploadDir;//本地文件夾目錄路徑
17 
18     form.parse(req, (err, fields, files) => {
19         let oldPath = files.cover.path;//這里的路徑是圖片的本地路徑
20         console.log(files.cover.name)//圖片傳過來的名字
21         let newPath = path.join(path.dirname(oldPath), files.cover.name);
22         //這里我傳回一個下載此圖片的Url
23         var downUrl = "http://localhost:" + listenNumber + "/upload/" + files.cover.name;//這里是想傳回圖片的鏈接
24         fs.rename(oldPath, newPath, () => {//fs.rename重命名圖片名稱
25             res.json({ downUrl: downUrl })
26         })
27     })
28 })
29 
30 app.listen(listenNumber)

部分重要邏輯大家可以按照自己的需求來做,這里需要引用的第三方包是express、formidable、path,大家可以在終端輸入以下命令下載:

npm install express
npm install formidable
npm install path

第二十五行可以拿到圖片在node服務器中的鏈接,大家可以通過小程序端的success回調函數拿到鏈接等數據,然后保存在data中,通過{{imgSrc}}進行渲染就能確定你的邏輯已經走通了。

希望我的教程能夠幫到大家,加油!!!

 

# 博主說:哈嘍大家,實在不好意思,這個文章實在是有一些久了,關於formidable或者其他庫的使用之類的規則和詳情都是變了的,小伙伴們可以看一下后面我一篇關於React富文本的文章,里面也有關於文件上傳的node代碼,鏈接在這兒: React+wangeditor+node富文本處理帶圖片上傳


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM