uni-app 在给微信需要固定ip发送图片时,总是找不到参数

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app 在给微信需要固定ip发送图片时,总是找不到参数

示例代码:

.

操作步骤:

.

预期结果:

.

实际结果:

.

bug描述:

'use strict';  
const fs = require('fs')  
const path = require('path')  
const FormData = require('form-data');    
exports.main = async (event, context) => {  
   const form = new FormData();  
    const { filename, contentType, buffer } = await resolveFile(  
      event.thumb  
    );  
    form.append("media", buffer, {  
      filename,  
      contentType,  
    });  
  const res = await uniCloud.httpclient.request('https://api.weixin.qq.com/cgi-bin/material/add_material?type=image&access_token=123', {  
    method: 'POST',  
    content: form.getBuffer(),    
    headers: form.getHeaders(),    
    dataType: 'json'    
  })  
  return res  
};  
   const images = await uniCloud.httpProxyForEip.postForm(  
      `https://api.weixin.qq.com/cgi-bin/material/add_material?type=image&access_token=${token.data[0].authorizer_access_token}`,  
     form.getBuffer(),  
     form.getHeaders()  
    );

但是一直错误"body": “{“errcode”:41005,“errmsg”:“media data missing hint: [Z1Apna0212p504] rid: 66f3d2ab-6735de3e-41e14703”}”,


2 回复

阿里云提供的固定ip方案不支持post formdata类型,这个postForm方法对应的body是application/x-www-form-urlencoded类型,你这个需求建议使用另外两个云厂商的云函数


在处理uni-app向固定IP的服务器发送图片时,如果遇到找不到参数的问题,通常是因为文件上传过程中参数配置不正确或者请求处理不当。以下是一个示例代码,展示了如何使用uni-app上传图片到固定IP的服务器,并确保参数正确传递。

1. 前端代码(uni-app)

首先,确保你已经选择了图片,并且获取到了图片的临时文件路径。这里是一个简单的选择图片并上传的示例:

// 选择图片
uni.chooseImage({
    count: 1,
    success: (res) => {
        const tempFilePaths = res.tempFilePaths;
        uploadImage(tempFilePaths[0]);
    }
});

// 上传图片
function uploadImage(filePath) {
    uni.uploadFile({
        url: 'http://<固定IP>:<端口>/upload', // 替换为你的服务器地址
        filePath: filePath,
        name: 'file', // 后端接收的文件参数名
        formData: {
            user: 'testUser' // 其他参数,如用户信息
        },
        success: (uploadFileRes) => {
            console.log('上传成功:', uploadFileRes.data);
        },
        fail: (err) => {
            console.error('上传失败:', err);
        }
    });
}

2. 后端代码(Node.js Express 示例)

后端需要处理文件上传请求,这里以Node.js配合Express和multer中间件为例:

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

const app = express();
const port = 3000;

// 设置存储配置
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/');
    },
    filename: function (req, file, cb) {
        cb(null, Date.now() + path.extname(file.originalname));
    }
});

const upload = multer({ storage: storage });

// 图片上传路由
app.post('/upload', upload.single('file'), (req, res) => {
    console.log('接收到的文件:', req.file);
    console.log('其他参数:', req.body);
    res.send('文件上传成功');
});

app.listen(port, () => {
    console.log(`服务器运行在 http://localhost:${port}`);
});

注意事项

  • 确保你的服务器允许从uni-app的发起源进行跨域请求(CORS)。
  • 检查后端服务器的端口和IP地址是否正确配置,并且服务器正在运行。
  • 在uni-app中,url字段需要填写你的服务器地址,确保端口和路径正确。
  • 使用formData传递其他参数时,确保参数名与后端接收的名称一致。

通过上述代码,你应该能够成功地从uni-app上传图片到固定IP的服务器,并正确传递其他参数。

回到顶部