#node.js #azure #express #video-streaming #azure-storage
Вопрос:
Приведенный ниже код позволяет передавать потоковое видео из хранилища Azure с помощью node.js пакет «хранилище azure».
Я хочу достичь той же цели, но с помощью пакета «@azure/storage-blob».
.....
app.get("/video", (req, res) => {
const videoPath = req.query.path;
const blobService = createBlobService();
const containerName = "videos";
blobService.getBlobProperties(containerName, videoPath, (err, properties) => {
if (err) {
console.error(`Error occurred getting properties for video ${containerName}/${videoPath}.`);
console.error(err amp;amp; err.stack || err);
res.sendStatus(500);
return;
}
// Writes HTTP headers to the response.
res.writeHead(200, {
"Content-Length": properties.contentLength,
"Content-Type": "video/mp4",
});
// Streams the video from Azure storage to the response.
blobService.getBlobToStream(containerName, videoPath, res, err => {
if (err) {
console.error(`Error occurred getting video ${containerName}/${videoPath} to stream.`);
console.error(err amp;amp; err.stack || err);
res.sendStatus(500);
return;
}
});
});
});
app.listen(PORT, () => {
console.log(`.....`);
});
Заранее спасибо…
Ответ №1:
Хорошо,я нахожу решение …
app.get("/video", async (req, res) => {
try {
// Create the BlobServiceClient object which will be used to create a container client
const blobServiceClient = BlobServiceClient.fromConnectionString(
AZURE_STORAGE_CONNECTION_STRING
);
const containerName = 'videos';
const blobName = req.query.path;
// Get a reference to a container
const containerClient = blobServiceClient.getContainerClient(containerName);
// Get a block blob client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
console.log('nDownloaded blob content...');
const downloadBlockBlobResponse = await blockBlobClient.download(0);
downloadBlockBlobResponse.readableStreamBody.pipe(res);
} catch (err) {
console.error(err);
res.sendStatus(500);
}
});