Anatolyukropov

File Download NodeJs

Jul 27th, 2020 (edited)
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. **@ запускаем readableStream по закачке файла на сервер. Ловим первые данные и определяем по ним тип файла.
  2. **@ Если файл типа image - то заливаем его в базу.
  3.  
  4. import { fromBuffer } from 'file-type';
  5. import { LogicError } from '../../../../../utils/LogicError';
  6. import { PHOTO_URL_NOT_IMAGE } from 'src/error-codes.config';
  7.  
  8. export const downloadByPhotoUrl = {
  9.   async handler(payload: { photoUrl: string; productId: string }) {
  10.     const { photoUrl, productId } = payload;
  11.     const splitUrl = photoUrl.split('/');
  12.     const filename = splitUrl[splitUrl.length - 1];
  13.     const stream = this.gotInstanse.stream(photoUrl);
  14.  
  15.     stream.on('data', async data => {
  16.       try {
  17.         stream.pause();
  18.         const fileType = await fromBuffer(data);
  19.  
  20.         // сохраняем файл если это картинка, если нет ничего не делаем.
  21.         if (fileType && fileType?.mime?.split('/')[0] === 'image') {
  22.           const fileId = await this.broker.call('files.upload', this.gotInstanse.stream(photoUrl), {
  23.             meta: {
  24.               type: fileType.ext || '',
  25.               filename: filename || '',
  26.             },
  27.           });
  28.  
  29.           this.broker.call('products.update', { id: productId, photoId: fileId });
  30.         } else {
  31.           this.broker.call('products.update', { id: productId, photoUrl: null });
  32.         }
  33.       } catch (e) {
  34.         throw new LogicError(PHOTO_URL_NOT_IMAGE, e.message);
  35.       }
  36.     });
  37.   },
  38. };
  39.  
Add Comment
Please, Sign In to add comment