firebase ENOENT云函数上传图像中无此类文件或目录错误

izkcnapc  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(141)

我是云函数的新手,正在创建一个函数,可以将Flutter image_picker中的图像上传到云存储中,下面是相关的云fn代码:

// upload image to storage
        const bucket = admin.storage().bucket();
        const destination = data.storageCollection + '/' + data.itemID;

      
        const filePath = data.filePath;

        console.log('filePath is ' + data.filePath);

        await bucket.upload(filePath, {
          destination: destination,
          gzip: true,
        });

我得到这个错误:
uploadProductPic中的函数错误:[firebase_函数/内部]项目:未定义。函数:错误:错误:错误:没有此类文件或目录,请打开"/data/user/0/com.appIdentifier.here/缓存/a2b21481-ab56 - 4af5-bc97 - 4c2d050107e12579524263120800910.jpg "
也许我只是不太擅长存储目录,但我非常确定这是绝对路径。我也尝试过其他组合:
x一个一个一个一个x一个一个二个一个x一个一个三个一个
什么都没起作用。有人能告诉我为什么我的路径是错误的吗?我只是从一个XFile的. path属性中得到它。我发现了一些类似的堆栈帖子,但还没有找到解决方案。
编辑:这是我的客户端代码

Future<void> uploadProductPic(String productID, XFile file) async {
try {
  await functions.httpsCallable('uploadImage').call(<String, String>{
    "filePath": file.path,
    "itemID": productID,
    "storageCollection": "productPic",
    "itemCollection": "products"
  });
} catch (e) {error catching stuff}

这是我的完整云函数:

/**
 *
 * @param {string} filePath
 * @param {string} itemID
 * @param {string} storageCollection
 * @param {string} itemCollection
 */

exports.uploadImage = functions.region("australia-southeast1")
    .https.onCall(async (data, context) => {
 
  // Only allow authorised users to execute this function.
  if (!(context.auth && context.auth.token)) {
    throw new functions.https.HttpsError(
        "permission-denied",
        "Must be an administrative user to upload an image."
    );
  }

  try {

    // upload image to storage
    const bucket = admin.storage().bucket();
    const destination = data.storageCollection + '/' + data.itemID;

    const filePath = data.filePath;
   
    await bucket.upload(filePath, {
      destination: destination,
      gzip: true,
    });

    // get download url
    const url = await bucket.getDownloadURL(destination);

 // upload url to database
        const firebaseRef = data.itemCollection + '/' + data.itemID;
        await firebaseTools.firestore.updateDoc(firebaseRef, {'imageURL': url});

  } catch (err) {
    throw new functions.https.HttpsError("internal", "project: " +
  process.env.GCP_PROJECT +
  ". Function: uploadImage. Error: " + String(err));
  }
}
);

谢谢你的帮助!

ttygqcqt

ttygqcqt1#

云功能在云中的完全远程计算机上运行,而不是在安装应用的设备上运行。它无法访问设备上的本地文件。
如果要从应用上传文件,应使用适用于应用平台的Firebase Storage SDK,而不是Cloud Functions。

相关问题