Имя: Пароль:
1C
 
Обмен данными через e-mail
,
0 BendikaVils
 
23.09.24
22:59
Всем привет, у меня стоит задача чтобы на e-mail отправлялся файл обмена из нетиповой конфы, а БП этот файл читала и загружала данные. Я посмотрел на ИТс и как я понял такое можно сделать только в РИБЕ, вопрос, это и правда можно сделать только в РИБЕ? Если да, то лучше через FTP обмен сделать?
1 Волшебник
 
23.09.24
23:08
Лучше через FTP
2 Web00001
 
24.09.24
07:43
А где вы берете этот файл обмена?
3 Повелитель
 
24.09.24
09:04
(0) Отвечу частично, чем FTP лучше емайла. Я пользовался и тем и тем. При этом обменом через емайл в РИБ пользовался 1-2 года, а потом перешел на FTP.

Как-то было, что мне емайл адреса, которые использовал только для обмена банили (яндекс/майл.ру), то ли по спаму, то ли ещё по какой-то причине. Потому ушел на свои корпоративные ящики.

Во многих почтовиках есть ограничение на вложения, по 30-50 мб. И если в обмен попадало много данных, это всё застревало. Если есть свой почтовый сервер или корпоративная почта без ограничений, то будет лучше.
А FTP мне показалось надежнее и проще.
4 Smit1C
 
24.09.24
09:12
(3) тут и добавить нечего,
разве только про использование пассивного режима на FTP
5 BendikaVils
 
24.09.24
10:01
(2) Он формируется при обмене, не я механизм делал, не скажу
6 BendikaVils
 
24.09.24
09:35
Вообще я это делаю для фрэша и ГРМ и мне сказали они FTP не любят и лучше сделать через почту, но никак не могу понять как через почту принимать и обмениваться вне РИБа
7 craxx
 
24.09.24
09:37
(0) Лучше всего обмен через Яндекс-диск.
Но там пилить придется.
8 BendikaVils
 
24.09.24
09:44
Было бы хорошо, но блин, даже в БСП нету обмена через яндекс диск
9 LinuxOrg
 
24.09.24
09:48
E-mail? FTP? Netscape? Я попал в 98й год из 2024го?
10 Мультук
 
гуру
24.09.24
09:48
(0)

1) Вот скриншот из типовой БП 3
Два типовых обмена. Это не РИБ (смешно, да)
С УТ и с ЗУП

В настройках транспорта этих обменов можно выбрать "почта".
Я х.з. работает ли это, но "почему бы нет"

2) Но сколько я помню по прошлым темам у вас "там" вообще нетиповой обмен
Совсем.
Тогда пишите свою нетиповую внешнюю обработку.
Согласовывайте.
Согласовывайте её работу как регламентное.

Я с фрэш не работал, но думаю вам будет весело
11 BendikaVils
 
24.09.24
09:49
(10) я же говорю конфигурация у меня нетиповая у меня там нету этой настройки синхронизации данных
12 Мультук
 
гуру
24.09.24
09:51
(11)

Но БП то у вас типовой. Там то можно посмотреть "а как это сделано"
13 ptiz
 
24.09.24
09:54
(0) Настроить обмен через каталог, а дополнительной утилитой (через виндовый планировщик) пулять файлы из каталога в почту, и наоборот - получать из почты в каталог.
14 ptiz
 
24.09.24
09:55
Конечно, если речь про мелкие файлы. Если большие - можно обмениваться ссылками на файлообменники.
15 LinuxOrg
 
24.09.24
10:04
Код сервера


const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const helmet = require('helmet');

// Константы для конфигурации
const UPLOAD_DIR = './uploads';
const PORT = process.env.PORT || 3000;

const app = express();
app.use(helmet()); // Улучшенная безопасность через заголовки

// Функция для проверки и создания директории загрузки
const ensureUploadDirExists = () => {
  if (!fs.existsSync(UPLOAD_DIR)) {
    fs.mkdirSync(UPLOAD_DIR);
  }
};

// Определение хранилища файлов
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    ensureUploadDirExists();
    cb(null, UPLOAD_DIR);
  },
  filename: (req, file, cb) => {
    const uniqueSuffix = `${Date.now()}-${Math.round(Math.random() * 1e9)}`;
    cb(null, `${file.fieldname}-${uniqueSuffix}${path.extname(file.originalname)}`);
  },
});

// Валидация файла через multer (ограничение размера и типа файла)
const upload = multer({
  storage,
  limits: { fileSize: 10 * 1024 * 1024 }, // Ограничение размера файла до 10MB
  fileFilter: (req, file, cb) => {
    const fileTypes = /jpeg|jpg|png|pdf|txt/; // Разрешенные типы файлов
    const extname = fileTypes.test(path.extname(file.originalname).toLowerCase());
    const mimetype = fileTypes.test(file.mimetype);

    if (mimetype && extname) {
      return cb(null, true);
    } else {
      cb(new Error('Unsupported file type'));
    }
  },
});

// Маршрут для загрузки файла
app.post('/upload', upload.single('dataFile'), (req, res) => {
  if (!req.file) {
    return res.status(400).json({ error: 'No file was uploaded' });
  }

  res.status(200).json({ message: 'File uploaded successfully', filename: req.file.filename });
});

// Запуск сервера
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});