Advertisement
masquitos

Untitled

Jul 29th, 2020 (edited)
1,464
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3. const express = require("express");
  4. const router = express.Router();
  5. const dbHelper = require("../../../db/db_helper");
  6. const parser = require("../../../helper/parser");
  7. const requester = require("../../../helper/requester");
  8. const avatar = require("./avatar");
  9.  
  10. /**
  11.  *  Роутер моего профиля и других пользователей
  12.  */
  13. router.use("/avatar", avatar);
  14.  
  15.  
  16.  
  17. /**
  18.  *  Обработка аватарки
  19.  */
  20.  
  21.  
  22. const fs = require("fs");
  23. const fsPromises = fs.promises;
  24. const express = require("express");
  25. const formidable = require("formidable");
  26. const path = require("path");
  27. const router = express.Router();
  28. const environment = require("../../../environment");
  29. const form = formidable({
  30.   multiples: false,
  31.   uploadDir: environment.tmp_dir_avatars,
  32.   maxFileSize: environment.max_avatar_size
  33. });
  34. const sharp = require("sharp");
  35. const requester = require("../../../helper/requester");
  36. const myUserTypes = require("../../../model/roles");
  37. const myErrorCodes = require("../../../helper/errorcodes");
  38.  
  39. /**
  40.  * Сохраняет аватарку пользователя
  41.  */
  42.  
  43. router.route("/").post(billing, validFile, saveAvatar);
  44.  
  45. async function billing(req, res, next) {
  46.   console.log("billing avatar");
  47.   if (req.user.role === myUserTypes.GUEST) {
  48.     console.error("error billing avatar", req.user.id);
  49.     return res.json(requester.createError(myErrorCodes.BILLING_ERROR));
  50.   }
  51.   return next();
  52. }
  53.  
  54. async function validFile(req, res, next) {
  55.   try {
  56.     console.log("validFile");
  57.     const file = await new Promise((resolve, reject) => {
  58.       console.log("before  form.parse");
  59.       form.parse(req, (err, fields, decodedObject) => {
  60.         console.log("inside  form.parse");
  61.         if (err) {
  62.           return reject(err);
  63.         }
  64.         const file = decodedObject.avatar;
  65.         if (!file.type) {
  66.           return reject({
  67.             message: "File format doesnt exist " + file.type,
  68.             file: file
  69.           });
  70.         }
  71.         // image/x-png, image/png, image/gif, image/jpeg
  72.         const fileType = file.type;
  73.         if (
  74.           fileType === "image/x-png" ||
  75.           fileType === "image/png" ||
  76.           fileType === "image/gif" ||
  77.           fileType === "image/jpeg"
  78.         ) {
  79.           console.log("readed file", file.name, "to", file.path);
  80.           return resolve(file);
  81.         } else {
  82.           return reject({
  83.             message: "Wrong file format " + fileType,
  84.             file: file
  85.           });
  86.         }
  87.       });
  88.     });
  89.     res.locals.file = file;
  90.     return next();
  91.   } catch (err) {
  92.     if (err.file && err.file.path) {
  93.       // Delete file
  94.       fs.unlink(err.file.path, err => {
  95.         if (err) {
  96.           console.error(err);
  97.           return;
  98.         }
  99.       });
  100.     }
  101.     console.error("error validFile userId:", req.user.id, err.message);
  102.     return res.json(requester.createError());
  103.   }
  104. }
  105.  
  106. async function saveAvatar(req, res) {
  107.   const userId = req.user.id;
  108.   let body;
  109.   try {
  110.     const file = res.locals.file;
  111.     const newPath =
  112.       // 160 mini
  113.       await sharp(file.path)
  114.         .jpeg({
  115.           quality: 75
  116.         })
  117.         .resize(160, 160)
  118.         .toFile(environment.dir_avatars + "/" + userId + "-mini" + ".jpeg");
  119.  
  120.     // 640 full
  121.     await sharp(file.path)
  122.       .jpeg({
  123.         quality: 75
  124.       })
  125.       .resize(640, 640)
  126.       .toFile(environment.dir_avatars + "/" + userId + "-full" + ".jpeg");
  127.  
  128.     // Delete tmp file
  129.     fs.unlink(file.path, err => {
  130.       if (err) {
  131.         console.error(err);
  132.         return;
  133.       }
  134.       console.log("Deleted file", file.path);
  135.     });
  136.  
  137.     body = requester.createBody();
  138.   } catch (error) {
  139.     console.error("error saveAvatar", userId, error);
  140.     body = requester.createError(error);
  141.   }
  142.   res.json(body);
  143. }
  144.  
  145. module.exports = router;
  146.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement