Javascript 如何使用google cloud和node js从firebase存储中检索图像并将其显示在网页上
我将图像存储在firebase存储中,现在我想将其显示在我的页面上Javascript 如何使用google cloud和node js从firebase存储中检索图像并将其显示在网页上,javascript,node.js,firebase,firebase-storage,Javascript,Node.js,Firebase,Firebase Storage,我将图像存储在firebase存储中,现在我想将其显示在我的页面上 const firebase = require('./../config/firebase'); const gcloud = require('google-cloud'); const fs = require('fs'); var storage = gcloud.storage({ projectId: 'test-a1e76', keyFilename: 'test-a1e76-firebase-adminsdk-
const firebase = require('./../config/firebase');
const gcloud = require('google-cloud');
const fs = require('fs');
var storage = gcloud.storage({
projectId: 'test-a1e76',
keyFilename: 'test-a1e76-firebase-adminsdk-7111d-124guy123eac.json',
});
var bucket = storage.bucket('test-a1e76.appspot.com');
我的设置就是这样的
这是我的get方法
router.get('/image', function (req,res) {
var remoteReadStream = bucket.file('download.png').createReadStream();
var localWriteStream = fs.createWriteStream('/images/watchers/2jIompF9FUZ6A4LnpBcbpHWw8dx2/download.png');
var ss = remoteReadStream.pipe(localWriteStream);
res.send(ss);
})
我只是尝试了一下,因为它是写在谷歌云计算的npm文档上的。
我试着把它放在get方法中,看看它是如何工作的
在那之后我犯了这个错误
Error: ENOENT: no such file or directory, open 'C:\images\test\2jIoasd24zd13ase121s2Ww8dx2\download.png'
这是我的ajaxget方法
$.ajax({
url:'/user/image',
type:'GET',
success:function(data){
console.log(data.path);
}
});
这里是否有人可以指导我如何从firebase存储中检索图像并将其显示在我的网页上?。使用谷歌云npm?因为我读到一些帖子说node js不支持firebase存储,所以他们改用google cloud。你只需要显示图像,对吗?有一种肮脏的方式 1-在你的bucket上上传一张图片,点击它(在Firebase控制台中) 2-屏幕右侧显示有关文件的信息 3-查找“下载Url”(或类似的内容)并单击它 4-这是一个url示例: 如您所见,有一种模式: 获取您的令牌,现在您可以显示bucket上的所有图像,只需传递文件名和令牌(如本例所示) 这是因为Firebase为您的服务提供了RESTAPI 记住:在设置开放规则之前进行身份验证 示例:每个人都能阅读。只有身份验证用户才能写入。
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if request.auth == null;
allow write: if request.auth != null;
}
}
}
在带有节点的firebase函数中,我使用了下面的代码,它工作得非常好
我是这样工作的
var admin=require(“firebase admin”);
...
app.get('/picture',异步(req,res)=>{
const fileRef=admin.storage().bucket().file('03aead66e97f0d50ce549b6fffc1b6d7.svg');
const hash=await fileRef.download()
res.contentType(fileRef.metadata.contentType);
res.end(散列[0],'binary');
});代码>
const uuidv4 = require('uuid/v4');
const uuid = uuidv4();
const os = require('os')
const path = require('path')
const cors = require('cors')({ origin: true })
const Busboy = require('busboy')
const fs = require('fs')
var admin = require("firebase-admin");
var serviceAccount = {
"type": "service_account",
"project_id": "xxxxxx",
"private_key_id": "xxxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----\jr5x+4AvctKLonBafg\nElTg3Cj7pAEbUfIO9I44zZ8=\n-----END PRIVATE KEY-----\n",
"client_email": "xxxx@xxxx.iam.gserviceaccount.com",
"client_id": "xxxxxxxx",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-5rmdm%40xxxxx.iam.gserviceaccount.com"
}
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
storageBucket: "xxxxx-xxxx" // use your storage bucket name
});
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post('/uploadFile', (req, response) => {
response.set('Access-Control-Allow-Origin', '*');
const busboy = new Busboy({ headers: req.headers })
let uploadData = null
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
const filepath = path.join(os.tmpdir(), filename)
uploadData = { file: filepath, type: mimetype }
console.log("-------------->>",filepath)
file.pipe(fs.createWriteStream(filepath))
})
busboy.on('finish', () => {
const bucket = admin.storage().bucket();
bucket.upload(uploadData.file, {
uploadType: 'media',
metadata: {
metadata: { firebaseStorageDownloadTokens: uuid,
contentType: uploadData.type,
},
},
})
.catch(err => {
res.status(500).json({
error: err,
})
})
})
busboy.end(req.rawBody)
});
exports.widgets = functions.https.onRequest(app);