же хочу отправить файл, на беке его получаю как buffer в итоге, а как мне его провалидировать? на фронте то вся инфа о файле есть а на беке, нужно какой-то decode сделать или как? делаю по этому примеру.
Для передачи файла с использованием Node.js и Socket.IO вам потребуется выполнить следующие шаги: 1. Установите необходимые зависимости: Убедитесь, что у вас установлены Node.js и npm, затем установите модуль Socket.IO с помощью npm: npm install socket.io 2. Создайте сервер с использованием Socket.IO: Создайте сервер с использованием Node.js и Socket.IO, и настройте его на прослушивание определенного порта. Вот пример кода: javascript const http = require('http'); const fs = require('fs'); const server = http.createServer((req, res) => { // Обработка HTTP-запросов, если необходимо }); const io = require('socket.io')(server); io.on('connection', (socket) => { console.log('Подключение клиента через Socket.IO'); // Обработка события передачи файла socket.on('file', (data) => { // Сохраните полученный файл на сервере fs.writeFileSync('путь_к_папке/имя_файла', data); console.log('Файл успешно получен и сохранен'); }); }); server.listen(3000, () => { console.log('Сервер запущен на порту 3000'); }); 3. Создайте клиентскую сторону: Создайте HTML-страницу с клиентской стороной, которая подключится к серверу через Socket.IO и отправит файл. Вот пример кода: html <!DOCTYPE html> <html> <head> <title>Загрузка файла через Socket.IO</title> </head> <body> <input type="file" id="fileInput"> <button onclick="sendFile()">Отправить файл</button> <script src="/socket.io/socket.io.js"></script> <script> const socket = io.connect('http://localhost:3000'); // Замените на адрес вашего сервера function sendFile() { const fileInput = document.getElementById('fileInput'); const file = fileInput.files[0]; const reader = new FileReader(); reader.onload = (e) => { const data = e.target.result; socket.emit('file', data); }; reader.readAsArrayBuffer(file); } </script> </body> </html> 4. Запустите сервер и откройте страницу в браузере: Запустите ваш Node.js-сервер, который слушает порт 3000. Затем откройте HTML-страницу в браузере. Вы сможете выбрать файл и отправить его на сервер через Socket.IO. Теперь ваш сервер и клиент готовы для передачи файлов через Socket.IO. Важно учесть, что вы можете настроить дополнительные механизмы для обработки ошибок, контроля доступа и безопасности, в зависимости от ваших потребностей.
Это текстовый файл, изображение или ещё что? В большинстве случае, лучше валидировать данные когда они потоком идут, а не после отгрузки всего файла. Но, судя по всему, ты хочешь всё по быстрому и плевать на качество. Рекомендую забить на сокеты и юзать традиционный ajax.
я его изучаю для того чтобы в резюме добавить что я умею с ним работать, суть в том что на фронте то я провалидирую файл (image будет), но валидация так же должна быть и на беке. а на беке я получаю buffer, где нет никакой инфы о файле, значит его нужно декодировать или что-то такое. пока я могу ограничить только по размеру файла так как это устанавливается свойством buffersize, второй вариант конечно это сокет юзать лишь для триггера тех или иных запросов на бек где уже существует нормальный парсер file, но тогда теряется смысл сокета
В резюме то ты их добавишь, но это не будет означать, что ты умеешь с ними работать. Чтобы уметь работать с ними, нужно иметь представление не только о сокетах, но и многих других вещах. Для валидации и работы с изображениями можешь взять, к примеру, sharp либу. Почитай её документацию, изучи и она всё сделает за тебя. В общем, всё будет так, как ты привык!
Я делаю личный проект где будет доказательство что я разобрался с сокетом и можно это все увидеть) так проблема была в том что бы как мне распарсить инфу о файле который по умолчанию превращаеться портсо в буффер в socket.on событии
Ну вот, как я и говорил. Делаешь всё методом тыка, сам не понимаешь ничего
всмысле методом тыка. делаю по документации. она базовая, теперь я задался вопросом как провалидировать, нашел способ через Filereader, там base64 получается и можно минимум увидеть формат, а если размер превысит то вовсе ничего не будет там так что все ок
больше книжек читать - тогда будешь грамотно описывать/выражать мысли, курсы в топку
Как и твоё мнение!
Ты что такое несёшь? Какой ещё base64? Зачем он тебе!?
это один из способов отправлять файлы... если в нормальном случае мы отправляем формдату и ставим multipart то никаких проблем.. в сокете такого нет
при всем уважении, но я пока от тебя не увидел ни одного годного совета, сначала ты мне скинул пример с доки который я и юзаю а вопрос был в другом потом ты мне посоветовал вообще не юзать сокет, а потом просто говоришь что я все не так делаю...
ФормДата это ненормальный случай. От него мало плюсов в SPA + http/2/3. FD избыток прошлого!
ну как сказать. например rtkquery который я так же решил изучить выяснилось что не хочет принимать просто обьект где я укажу content/type, он видел его криво, но если запихнуть все в формдату то все ок, и контент тайп не нужно указывать
зависит от реализации сервера, вообще протокол http это все таки протокол отключенного соединения, клиент не обязан быть подсоединенным
Офигенный у тебя мессенджер!!! На фронте ещё и redux. Жесть.
а ты что предлагаешь? на нативном js??? react, redux toolkit, express prisma. современные актуальные технологии что не так с ними?
Это выгодно для загрузки нескольких файлов. http/2 позволит загружать множество файлов одновременно без установки новых соединений, что даёт большое преимущество во всех планах.
сколько ты лет уже работаешь в айти?
современные сайты используют клауды для защиты от бот трафика, там корректно обрабатывается подобная пересылка данных?
express.. современные актуальные технологии Но это не точно
следующий левел это nest.js, а самый продвинутый это serverless технологии...
Экспресс устарел лет 5 назад. Но с ним очень много статей, курсов, примеров. А ещё он очень простой, поэтому для обучения подходит (да что уж там, наличие экспресса в большинстве проектов - не самая большая их проблема). Актуальный фреймворк примерно того же уровня абстракции - fastify Нест - фактически стандарт сейчас, но на любителя (в нём хватает минусов, с ним хватает проблем) Serverless это вообще buzzword. Наверное потому и сложно
nustify nest, как я понимаю просто расширенная надстройка над express, под капотом все равно он
Обсуждают сегодня