FireBase存储从Node.js上传图像文件 [英] Firebase Storage upload image file from Node.js
本文介绍了FireBase存储从Node.js上传图像文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
请帮助
我从客户端接收图像并将其保存在服务器上的文件系统中,然后处理此图像,之后需要将其上传到Firebase存储
我尝试在异步函数中将图像文件从Node.js上传到Firebase存储
const path = process.cwd() + '/my_image.jpg';
const file = readFileSync(path);
await firebase.storage().ref().child('my_image.jpg').put(file);
...
但我有错误
第一个参数必须是String类型或Buffer的实例。收到Uint8Array的实例
好的,我尝试二进制格式
const path = process.cwd() + '/my_image.jpg';
const file = readFileSync(path, { encoding: 'base64' });
await firebase.storage().ref().child('my_image.jpg').putString(file, 'base64');
...
我收到错误
Firebase存储:字符串与格式‘Base64’不匹配:找到无效字符"
我已经尝试了很多方法,但都不管用! 我做错了什么?
推荐答案
您可以在此处使用此代码
var admin = require("firebase-admin");
const uuid = require('uuid-v4');
// CHANGE: The path to your service account
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
storageBucket: "<BUCKET_NAME>.appspot.com"
});
var bucket = admin.storage().bucket();
var filename = "path/to/image.png"
async function uploadFile() {
const metadata = {
metadata: {
// This line is very important. It's to create a download token.
firebaseStorageDownloadTokens: uuid()
},
contentType: 'image/png',
cacheControl: 'public, max-age=31536000',
};
// Uploads a local file to the bucket
await bucket.upload(filename, {
// Support for HTTP requests made with `Accept-Encoding: gzip`
gzip: true,
metadata: metadata,
});
console.log(`${filename} uploaded.`);
}
uploadFile().catch(console.error);
若要成功运行此代码,您需要:
- 将FirebaseAdmin SDK添加到您的服务器
- 安装uuid-v4
- 将
"path/to/serviceAccountKey.json"
替换为您自己的服务帐户的路径。Here是获取您的产品的指南。 - 将
<BUCKET_NAME>
替换为您默认存储桶的名称。您可以在Firebase Console的存储部分找到此名称。存储桶名称不得包含gs://
或任何其他协议前缀。例如,如果Firebase控制台中显示的存储桶URL为gs://bucket-name.appspot.com
,则将字符串bucket-name.appspot.com
传递给Admin SDK。 - 将
"path/to/image.png"
替换为您自己的映像的路径。 - 如果需要,请相应调整
metadata
中的contentType
。
只想让您知道,每当您使用Firebase控制台上传映像时,都会自动生成访问令牌。但是,如果您使用任何Admin SDK或gsutil上传图像,您将需要自己手动生成此访问令牌。这就是为什么uuid
部分非常重要
Firebase支持表示正在修复此问题,但我认为任何有此问题的人都应该这样做,而不是等待Firebase解决此问题。
这篇关于FireBase存储从Node.js上传图像文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文