我的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',
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上的存储的原因是什么
答案 0 :(得分: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;
}
答案 1 :(得分:0)
我遇到了一个相关问题。传递文件对象返回错误: TypeError:无法读取未定义的属性'byteLength'
您应该像这样传递buffer属性,而不是传递文件对象:
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");