我很难找到一些代码来完成这项工作,而且我自己在尝试实现这项工作时也遇到了麻烦。我想创建Firebase函数,它将调用一个映像URL(此URL具有来自Mapbox的与其关联的令牌(。然后我想把图像写入Firebase Storage,这样我以后就可以从那里引用它来提供它。到目前为止,我已经想好了如何获取图像,但把它保存到存储中似乎对我来说太难了!帮助
exports.getPolylineFromSessionId = functions.https.onRequest(async (req, res) => {
const sessionId = req.query.id;
if (sessionId) {
const sessionInfo = await db
.collection('sessions')
.doc(sessionId)
.get();
const session = sessionInfo.data();
const results = encodeURIComponent(polyline.encode(convertGpsTrack(session.gpsTrack)));
const url =
'https://api.mapbox.com/styles/v1/mapbox/satellite-v9/static/path-1+fff-0.5(' + results + ')/auto/700x200?access_token=' + mapboxToken;
const bucket = admin
.storage()
.bucket('gs://mybucket.appspot.com')
.file('thumbnails/' + sessionId + '.jpg');
const res = await fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'image/jpeg',
},
});
const blob = await res.blob();
bucket.save(blob, {
metadata: {
contentType: 'image/jpeg',
},
});
res.status(200).send(session);
} else {
res.status(400).send('sessionId required');
}
});
我终于想明白了!下面是我使用的代码!
var file = admin
.storage()
.bucket('gs://mybucket.appspot.com')
.file('thumbnails/' + sessionId + '.jpg');
request({ url: url, encoding: null }, function(err, response, buffer) {
var stream = file.createWriteStream({
metadata: {
contentType: response.headers['content-type'],
},
});
stream.end(buffer);
});