Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const express = require("express");
- const router = express.Router();
- const dbHelper = require("../../../db/db_helper");
- const parser = require("../../../helper/parser");
- const requester = require("../../../helper/requester");
- const avatar = require("./avatar");
- /**
- * Роутер моего профиля и других пользователей
- */
- router.use("/avatar", avatar);
- /**
- * Обработка аватарки
- */
- const fs = require("fs");
- const fsPromises = fs.promises;
- const express = require("express");
- const formidable = require("formidable");
- const path = require("path");
- const router = express.Router();
- const environment = require("../../../environment");
- const form = formidable({
- multiples: false,
- uploadDir: environment.tmp_dir_avatars,
- maxFileSize: environment.max_avatar_size
- });
- const sharp = require("sharp");
- const requester = require("../../../helper/requester");
- const myUserTypes = require("../../../model/roles");
- const myErrorCodes = require("../../../helper/errorcodes");
- /**
- * Сохраняет аватарку пользователя
- */
- router.route("/").post(billing, validFile, saveAvatar);
- async function billing(req, res, next) {
- console.log("billing avatar");
- if (req.user.role === myUserTypes.GUEST) {
- console.error("error billing avatar", req.user.id);
- return res.json(requester.createError(myErrorCodes.BILLING_ERROR));
- }
- return next();
- }
- async function validFile(req, res, next) {
- try {
- console.log("validFile");
- const file = await new Promise((resolve, reject) => {
- console.log("before form.parse");
- form.parse(req, (err, fields, decodedObject) => {
- console.log("inside form.parse");
- if (err) {
- return reject(err);
- }
- const file = decodedObject.avatar;
- if (!file.type) {
- return reject({
- message: "File format doesnt exist " + file.type,
- file: file
- });
- }
- // image/x-png, image/png, image/gif, image/jpeg
- const fileType = file.type;
- if (
- fileType === "image/x-png" ||
- fileType === "image/png" ||
- fileType === "image/gif" ||
- fileType === "image/jpeg"
- ) {
- console.log("readed file", file.name, "to", file.path);
- return resolve(file);
- } else {
- return reject({
- message: "Wrong file format " + fileType,
- file: file
- });
- }
- });
- });
- res.locals.file = file;
- return next();
- } catch (err) {
- if (err.file && err.file.path) {
- // Delete file
- fs.unlink(err.file.path, err => {
- if (err) {
- console.error(err);
- return;
- }
- });
- }
- console.error("error validFile userId:", req.user.id, err.message);
- return res.json(requester.createError());
- }
- }
- async function saveAvatar(req, res) {
- const userId = req.user.id;
- let body;
- try {
- const file = res.locals.file;
- const newPath =
- // 160 mini
- await sharp(file.path)
- .jpeg({
- quality: 75
- })
- .resize(160, 160)
- .toFile(environment.dir_avatars + "/" + userId + "-mini" + ".jpeg");
- // 640 full
- await sharp(file.path)
- .jpeg({
- quality: 75
- })
- .resize(640, 640)
- .toFile(environment.dir_avatars + "/" + userId + "-full" + ".jpeg");
- // Delete tmp file
- fs.unlink(file.path, err => {
- if (err) {
- console.error(err);
- return;
- }
- console.log("Deleted file", file.path);
- });
- body = requester.createBody();
- } catch (error) {
- console.error("error saveAvatar", userId, error);
- body = requester.createError(error);
- }
- res.json(body);
- }
- module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement