微信小程序文件上传

服务器端

const express = require('express');
const app = express();
const path = require('path');
const multer = require('multer');

// 设置存储引擎和文件保存位置
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/'); // 上传的文件将会保存在 uploads/ 目录下
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname); // 保留原始文件名
  }
});

// 创建上传对象
const upload = multer({ storage: storage });

// 处理文件上传的路由
app.post('/upload', upload.single('file'), (req, res) => {
  // req.file 包含已上传文件的信息
  // 构造文件访问路径
  const fileUrl = `http://103.242.3.33:3000/${req.file.path}`;
  // 返回文件访问路径给客户端
  res.json({ fileUrl: fileUrl });
});

// 配置静态文件服务,使上传的文件可以被访问
app.use(express.static(path.join(__dirname, 'uploads')));

// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

小程序端

upload() {
        let that = this;
        var fileList = [];

        wx.chooseMedia({
            count: 9, // 最多可以选择的文件个数
            mediaType: ['image', 'video'], // 文件类型,可以指定是图片还是视频,或者两者都有
            sourceType: ['album', 'camera'], // 选择图片的来源,可以是相册选择或者相机拍摄
            maxDuration: 30, // 视频的最长拍摄时间,单位秒
            camera: 'back', // 默认拉起的是前置或者后置摄像头
            success(res) {
                // 成功后的回调
                console.log('回调', res.tempFiles)

                res.tempFiles.forEach(file => {
                    console.log('file', file)
                    fileList.push(file.tempFilePath)
                    that.setData({
                        value: fileList
                    })
                    // 遍历选择的文件列表
                    const tempFilePath = file.tempFilePath;
                    // 调用上传文件的 API
                    wx.uploadFile({
                        header: {
                            "Content-Type": "multipart/form-data"
                        },
                        url: 'http://103.242.3.33:3000/upload/', // 开发者服务器的URL
                        filePath: tempFilePath, // 要上传文件资源的路径
                        name: 'file', // 必须填写对应的文件名,这个名字将会在服务器端获取文件时使用
                        formData: {
                            'user': 'test' // 附加的表单信息
                        },
                        success(uploadRes) {
                            // 上传成功的处理逻辑
                            console.log('上传成功', uploadRes);
                            var data = JSON.parse(uploadRes.data)


                            // callback(data.response)
                            // uploadRes.data 包含服务器的响应信息,通常是字符串形式,如果是JSON需要自行解析
                        },
                        fail(error) {
                            // 上传失败的处理逻辑
                            console.error('上传失败', error);
                        },
                        complete() {
                            // 无论成功与否都会执行的逻辑
                        }
                    });
                });
            },
            fail(res) {
                // 选择失败后的回调
                console.log(res.tempFiles)

            },
            complete(res) {
                // 选择结束后的回调(无论成功或失败都会执行)
                console.log(res.tempFiles)

            }
        })
    }