| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- var express = require('express');
- var router = express.Router();
- const fs = require('fs');
- var path = require('path');
- const createError = require('http-errors');
- const config = require('../../config/app');
- const { makeThumb } = require('../../libs/image');
- router.get(/^\/(tag|avatar)\/(128|256|512|480|320|640|720)\/([a-zA-Z0-9_]+).(png|jpg|jpeg|webp)$/, function (req, res, next) {
- (async function () {
- let params = Object.values(req.params);
- let [type, size, id, ext] = params;
- var staticRoot = config.STATIC_DIR;
- var thumbFilePath = path.resolve(staticRoot, 'thumbs/v1', [type, size, id].join('/')) + '.' + ext;
- var originalFilePath = path.resolve(staticRoot, 'thumbs/v1', [type, 'original', id].join('/')) + '.' + ext;
- let exists = fs.existsSync(originalFilePath);
- let dir;
- if (!exists) {
- let data;
- if (type == 'avatar') {
- try {
- data = fs.readFileSync(__dirname + `/../../dist/assets/avatar/${id}.jpeg`);
- } catch (e) {
- if (!data) data = fs.readFileSync(__dirname + `/../../dist/assets/avatar/default.jpeg`);
- }
- } else if (type == 'tag') {
- try {
- data = fs.readFileSync(__dirname + `/../../dist/assets/tag/${id}.png`);
- } catch (e) {
- }
- }
- if (!data) throw createError(404, 'Page not found');
- dir = path.dirname(originalFilePath);
- fs.mkdirSync(dir, { recursive: true });
- fs.writeFileSync(originalFilePath, data)
- }
- dir = path.dirname(thumbFilePath);
- fs.mkdirSync(dir, { recursive: true });
- await makeThumb(originalFilePath, thumbFilePath, size);
- res.sendFile(thumbFilePath);
- })().catch(next)
- });
- module.exports = router;
|