使用 firebase 功能将图像上传到云存储错误

Posted

技术标签:

【中文标题】使用 firebase 功能将图像上传到云存储错误【英文标题】:Image Uploading to Cloud Storage with firebase functions Error 【发布时间】:2019-06-23 19:31:32 【问题描述】:

我正在尝试将 base64 jpeg 图像上传到 Firebase 存储我不知道出了什么问题。我不认为错误来自我的图像编码。 我正在尝试使用 React Native(获取 API)将图像从用户的手机上传到 Firebase 存储以发送请求。

index.js 文件:

const functions = require("firebase-functions");
const cors = require("cors")( origin: true );
const fs = require("fs");
const UUID = require("uuid-v4");

const gcconfig = 
projectId: "awsome-34343434343434",
keyFileName: "awsome.json"
;

 const  Storage  = require("@google-cloud/storage");
const storage = new Storage(gcconfig);

exports.storeImage = functions.https.onRequest((request, response) => 
cors(request, response, () => 
console.log("THE BODY:" + JSON.stringify(request.body));

const body = JSON.parse(request.body);
console.log("THE IMAGE:" + body.image);
fs.writeFileSync("/tmp/uploaded-image.jpg", body.image, "base64", err => 
  console.log(err);
  return response.status(500).json( error: err );
);
const bucket = storage.bucket("awsome-1548769019561");
const uuid = UUID();
console.log("UUID: " + uuid);
bucket.upload(
  "/tmp/uploaded-image.jpg",
  
    uploadType: "media",
    destination: "/places/" + uuid + ".jpg",
    metadata: 
      metadata: 
        contentType: "image/jpeg",
        firebaseStorageDownloadTokens: uuid
      
    
  ,
  (err, file) => 
    if (!err) 
      response.status(201).json(
        imageUrl:
          "https://firebasestorage.googleapis.com/v0/b/" +
          bucket.name +
          "/o/" +
          encodeURIComponent(file.name) +
          "?alt=media&token=" +
          uuid
      );
     else 
      console.log(err);
      response.status(500).json( error: err );
    
    
  );
);
);

我发送的请求正文:

"image": "/9j/4QG1RXhpZgAATU0AKgAAAAgABwEQA..."

我收到此错误:

SyntaxError: Unexpected token o in JSON at position 1
at Object.parse (native)
at cors (/user_code/index.js:21:24)
at cors (/user_code/node_modules/cors/lib/index.js:188:7)
at /user_code/node_modules/cors/lib/index.js:224:17
at originCallback (/user_code/node_modules/cors/lib/index.js:214:15)
at /user_code/node_modules/cors/lib/index.js:219:13
at optionsCallback (/user_code/node_modules/cors/lib/index.js:199:9)
at corsMiddleware (/user_code/node_modules/cors/lib/index.js:204:7)
at exports.storeImage.functions.https.onRequest (/user_code/index.js:18:3)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:57:9)

【问题讨论】:

仅供参考,您不需要为 Cloud Storage SDK 提供配置。如果您在没有参数的情况下对其进行初始化,它将使用您项目的默认服务帐号,该帐号应该拥有您对 Cloud Storage 存储分区所需的所有访问权限。 【参考方案1】:

你的错误是由const body = JSON.parse(request.body);这一行引起的

Firebase 会自动解析请求正文中的数据,您无需自己尝试,请参阅function calls docs 中的“从请求中读取值”部分。由于您的正文已经是 JSON 格式,并且您的函数正在尝试对其进行重新 JSON 化...然后它会触发该错误。去掉那条线,你不应该再收到那个错误了。

【讨论】:

以上是关于使用 firebase 功能将图像上传到云存储错误的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 存储图像无法正确上传

如何从输入字段将图像上传到 Firebase 云存储?

无法使用 firebase 功能将图像上传到 firebase 存储

使用firebase上传vue js dropzone图像(存储不是功能)

使用本机反应将图像上传到 Firebase 存储

尽管没有引发错误,但图像似乎没有上传到 Firebase 存储