uni-app uniCloud.uploadFile在云函数里执行报Invalid options.filePath错误,但文档上并未要求filePath必传

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

uni-app uniCloud.uploadFile在云函数里执行报Invalid options.filePath错误,但文档上并未要求filePath必传

操作步骤:

    try {  
        const regex = /\/([^\/]+)$/;
        const match = imageUrl.match(regex);
        debugger;
        let result = await uniCloud.uploadFile({
            cloudPath: match[1] || "test.jpeg",
            fileContent: stream
        });
        console.log('图片上传成功:', result);
    } catch (error) {
        console.error('图片上传失败:', error);
    }

预期结果:

  • 上传成功

实际结果:

  • Error: 参数校验错误: Invalid options.filePath

bug描述:

const fs = require("fs");

let result = await uniCloud.uploadFile({
    cloudPath: "test-admin.jpeg",
    fileContent: fs.createReadStream(`${__dirname}/cos.jpeg`)
});

这个是官方文档,实际执行会报options.filePath


2 回复

HBuilderX版本多少?哪个云厂商?本地运行还是云端运行?


在uni-app中使用uniCloud.uploadFile时遇到“Invalid options.filePath”错误,通常是因为在调用该函数时缺少了必要的参数,尽管文档可能未明确标注filePath为必传参数,但在实际使用中,确保文件路径的正确传递是至关重要的。以下是一个示例代码,展示如何在云函数中正确使用uniCloud.uploadFile,同时确保路径参数的正确性。

首先,确保你的云函数配置正确,并且已经在uniCloud中启用了相关服务。下面是一个简单的云函数示例,用于处理文件上传:

// 云函数入口文件
const cloud = require('wx-server-sdk');

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
});

const db = cloud.database();
const _ = db.command;

exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  
  try {
    // 假设文件信息通过event传入,包括filePath和cloudPath(存储路径)
    const { filePath, cloudPath } = event;
    
    // 使用uniCloud.uploadFile上传文件
    const result = await uniCloud.uploadFile({
      cloudPath: cloudPath, // 存储在云存储中的路径
      filePath: filePath,    // 本地文件路径,这是必传的
      success: res => {
        // 上传成功后的处理逻辑
        console.log('File uploaded successfully:', res);
        return res;
      },
      fail: err => {
        // 上传失败后的处理逻辑
        console.error('File upload failed:', err);
        throw err;
      }
    });
    
    // 返回上传结果
    return result;
    
  } catch (error) {
    // 错误处理
    console.error('Error in cloud function:', error);
    return {
      error: error.message || 'An unknown error occurred'
    };
  }
};

在客户端代码中,你需要构建正确的filePathcloudPath,并将它们作为参数传递给云函数。例如:

uniCloud.callFunction({
  name: 'yourCloudFunctionName',
  data: {
    filePath: `${wx.env.USER_DATA_PATH}/yourFileName`, // 确保路径正确
    cloudPath: 'yourCloudPath/yourFileName'           // 云存储中的目标路径
  },
  success: res => {
    console.log('Cloud function response:', res);
  },
  fail: err => {
    console.error('Cloud function call failed:', err);
  }
});

请注意,filePath是本地文件的路径,在小程序中通常通过wx.chooseImagewx.getFileSystemManager().getFileInfo等方法获取。确保路径正确无误,并且文件确实存在于该路径下,是避免“Invalid options.filePath”错误的关键。如果问题依旧存在,请检查文件路径的拼接和传递过程,确保没有逻辑错误。

回到顶部