Implement Phase 2 asset storage pipeline
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
const express = require("express");
|
||||
const { sendImmutableMedia } = require("./streaming");
|
||||
|
||||
function createMediaRouter(assetService) {
|
||||
const router = express.Router();
|
||||
|
||||
async function sendMedia(request, response, next, kind) {
|
||||
const version = request.params.version;
|
||||
if (!version.endsWith(".webp")) {
|
||||
response.status(404).json({
|
||||
error: {
|
||||
code: "MEDIA_NOT_FOUND",
|
||||
message: "Asset media version not found",
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const descriptor = assetService.mediaDescriptor(
|
||||
request.params.assetId,
|
||||
kind,
|
||||
version.slice(0, -".webp".length),
|
||||
);
|
||||
await sendImmutableMedia(assetService, response, descriptor);
|
||||
} catch (error) {
|
||||
if (response.headersSent) {
|
||||
response.destroy(error);
|
||||
return;
|
||||
}
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
|
||||
router.get("/assets/:assetId/display/:version", (request, response, next) =>
|
||||
sendMedia(request, response, next, "display"),
|
||||
);
|
||||
router.get(
|
||||
"/assets/:assetId/thumbnail/:version",
|
||||
(request, response, next) =>
|
||||
sendMedia(request, response, next, "thumbnail"),
|
||||
);
|
||||
|
||||
return router;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createMediaRouter,
|
||||
};
|
||||
Reference in New Issue
Block a user