【问题标题】:node js uploading image with multer and save to firebase storagenode js用multer上传图像并保存到firebase存储
【发布时间】:2019-07-22 09:15:36
【问题描述】:

我的ejs前端代码如下

<form action='/powerLink' method='post' enctype='multipart/form-data'> <input type='file' name='file'> <input type='submit' value='fileupload'> </form>

我的接收文件的js代码如下

var storagee=firebase.storage().ref("test");
 app.post("/powerLink", multer.single('file'),function(req,res){
  let file = req.file;
  if(file){
    console.log(file);
     storage.put(file);
  }

当我 console.log(file) 它的价值如下 { 字段名:'

file',
  originalname: 'appiicon.png',
  encoding: '7bit',
  mimetype: 'image/png',
  buffer:
   <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 e1 00 00 00 e1 08 06 00 00 00 3e b3 d2 7a 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 65 00 ... >,
  size: 15966 }

我认为它可以保存到我的存储和文件夹“test”,然后将图像保存到该文件夹​​。但什么也没发生。

我无法猜测没有将图像文件上传到 Firebase 上的存储的原因是什么

【问题讨论】:

  • 你不需要multer包你可以绕过multer中间件直接上传文件到firebase。此外,如果您使用 multer,则需要使用上传的文件位置。更多关于不同功能的细节在 - firebase.google.com/docs/storage/web/upload-files
  • 您不需要 multer 将文件上传到 Firebase 存储。
  • 如果不使用multer,如何将文件发送到js上传到firebase?
  • 我认为NodeJS的firebase管理包中的功能比web少得多,对于浏览器你可以上传base64data url,从FileReader API获得的文件

标签: node.js firebase firebase-storage ejs


【解决方案1】:

在使用 firebase admin sdk 之前,我已经这样做了(打字稿):

async function uploadFile(file: Express.Multer.File, directory: string, fileName: string): Promise<string> {
  const bucket = firebaseAdmin.storage().bucket();
  const fullPath = `${directory}/${fileName}`;
  const bucketFile = bucket.file(fullPath);

  await bucketFile.save(file.buffer, {
    contentType: file.mimetype,
    gzip: true
  });

  const [url] = await bucketFile.getSignedUrl({
    action: "read",
    expires: "01-01-2050"
  });

  return url;
}

【讨论】:

    【解决方案2】:

    我遇到了一个相关问题。传入文件对象返回错误:TypeError: Cannot read property 'byteLength' of undefined

    您应该像这样传入缓冲区属性,而不是传入文件对象:

    var storagee=firebase.storage().ref("test");
    app.post("/powerLink", multer.single('file'),function(req,res){
        var file = req.file;
        if(file){
        console.log(file);
        let metadata = {contentType: file.mimetype, name: file.originalname}
        storage.put(file.buffer, metadata);
    }
    

    在此之后,我收到了 XMLHttpRequest 错误。我安装了 xhr2 模块。 https://github.com/pwnall/node-xhr2

    npm install xhr2
    

    如果您必须访问多个文件中的存储,您可以在索引/主文件中添加代码

    global.XMLHttpRequest = require("xhr2");
    

    【讨论】:

      猜你喜欢
      • 2019-08-31
      • 2019-11-21
      • 2019-05-22
      • 2021-07-24
      • 2021-08-22
      • 2017-09-25
      相关资源
      最近更新 更多