gpt4 book ai didi

node.js - 使用 node.js 将文件上传到 Firebase 存储中的文件夹中

转载 作者:行者123 更新时间:2023-12-05 04:51:27 25 4
gpt4 key购买 nike

我是上传文件的新手,我想将不同产品的图像上传到 Firebase 存储和应用程序中需要的另一个文件,一个产品可以有很多图像,所以我想为每个产品创建一个文件夹,文件夹的名称将是产品的 ID。

在代码中:我使用 @google-cloud/storage库将文件上传到 firebase 存储,但我在文档中搜索,我无法创建文件夹然后将其上传到文件夹。

这里是我的代码:

我创建 multer 的中间件将其传递到端点,并检查文件类型。

const express = require("express");
const Multer = require("multer");
const { Storage } = require("@google-cloud/storage")


const storage = new Storage({
projectId: process.env.PROJECT_FIREBASE_ID,
keyFilename: "hawat-service.json",
});
const bucket = storage.bucket(process.env.BUCKET_NAME);

const multer = Multer({
storage: Multer.memoryStorage(),
fileFilter: (req, file, cb) => {
checkFileType(req, file, cb);
}
})


const checkFileType = (req ,file, cb) => {
if (file.fieldname == 'cover' || file.fieldname == 'images') {
if (!file.originalname.match(/\.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF)$/)) {
req.error = new Error( "Only images are allowed")
return cb(null, false);
}
} else if (file.fieldname == 'card' || file.fieldname == 'licence') {
if (!file.originalname.match(/\.(pdf|jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF)$/)) {
req.error = new Error("Only images and pdf are allowed")
return cb(null, false);

}
}
return cb(null, true)
}


module.exports = (req, res, next) => {


return multer.fields([{ name: 'cover', maxCount: 1 },
{ name: 'images', maxCount: 5 }, { name: 'card', maxCount: 1 },
{ name: 'licence', maxCount: 1 }
])
(req, res, () => {
if (req.error) return res.status(400).send( {message : req.error.message })
next()
})

}

上传文件的函数是

const express = require("express");
const Multer = require("multer");
const { Storage } = require("@google-cloud/storage");


const storage = new Storage({
projectId: process.env.PROJECT_FIREBASE_ID,
keyFilename: "hawat-service.json",
});

const bucket = storage.bucket(process.env.BUCKET_NAME);

module.exports = {
upload: async ( file) => {
return new Promise((resolve, reject) => {
let newFileName = `${file.originalname}_${Date.now()}`;

let fileUpload = bucket.file(newFileName);

const createStream = fileUpload.createWriteStream({
metadata: {
contentType: file.mimetype
}
});

createStream.on('error', (error) => {
console.log("error in uploading is" , error)
reject('Something is wrong! Unable to upload at the moment.');
});

createStream.on('finish', () => {
// The public URL can be used to directly access the file via HTTP.
const url = `https://storage.googleapis.com/${bucket.name}/${fileUpload.name}`;

// storage.bucket(process.env.BUCKET_NAME).file(fileUpload.name).makePublic();


resolve(url);
});

createStream.end(file.buffer);
});

终点是

  router.post('/add-product' , auth, multer , seller.onAddProduct)

onAddProduct 函数是一个可以接收来自用户的多个文件的函数。

那么如何为每个产品创建一个文件夹,然后上传文件夹中的文件?

另外,创建文件夹后如何删除?

最佳答案

我使用的方法与您使用的方法不同,但您可以将我的解决方案用作案例研究

  await storage.bucket(bucketName).upload(filename, {
destination:"{Foldername}/{Filename}",
})

关于node.js - 使用 node.js 将文件上传到 Firebase 存储中的文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66905844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com