170 похожих чатов

Ребят хелп делаю чат на socket io, помимо сообщения так

же хочу отправить файл, на беке его получаю как buffer в итоге, а как мне его провалидировать? на фронте то вся инфа о файле есть а на беке, нужно какой-то decode сделать или как? делаю по этому примеру.

27 ответов

32 просмотра

Для передачи файла с использованием 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.

Yevhen- Автор вопроса
ᅠ ᅠ
Это текстовый файл, изображение или ещё что? В бол...

я его изучаю для того чтобы в резюме добавить что я умею с ним работать, суть в том что на фронте то я провалидирую файл (image будет), но валидация так же должна быть и на беке. а на беке я получаю buffer, где нет никакой инфы о файле, значит его нужно декодировать или что-то такое. пока я могу ограничить только по размеру файла так как это устанавливается свойством buffersize, второй вариант конечно это сокет юзать лишь для триггера тех или иных запросов на бек где уже существует нормальный парсер file, но тогда теряется смысл сокета

Yevhen
я его изучаю для того чтобы в резюме добавить что ...

В резюме то ты их добавишь, но это не будет означать, что ты умеешь с ними работать. Чтобы уметь работать с ними, нужно иметь представление не только о сокетах, но и многих других вещах. Для валидации и работы с изображениями можешь взять, к примеру, sharp либу. Почитай её документацию, изучи и она всё сделает за тебя. В общем, всё будет так, как ты привык!

Yevhen- Автор вопроса
ᅠ ᅠ
В резюме то ты их добавишь, но это не будет означа...

Я делаю личный проект где будет доказательство что я разобрался с сокетом и можно это все увидеть) так проблема была в том что бы как мне распарсить инфу о файле который по умолчанию превращаеться портсо в буффер в socket.on событии

Yevhen
Я делаю личный проект где будет доказательство что...

Ну вот, как я и говорил. Делаешь всё методом тыка, сам не понимаешь ничего

Yevhen- Автор вопроса

всмысле методом тыка. делаю по документации. она базовая, теперь я задался вопросом как провалидировать, нашел способ через Filereader, там base64 получается и можно минимум увидеть формат, а если размер превысит то вовсе ничего не будет там так что все ок

ᅠ ᅠ
В резюме то ты их добавишь, но это не будет означа...

больше книжек читать - тогда будешь грамотно описывать/выражать мысли, курсы в топку

Yevhen
всмысле методом тыка. делаю по документации. она б...

Ты что такое несёшь? Какой ещё base64? Зачем он тебе!?

Yevhen- Автор вопроса
ᅠ ᅠ
Ты что такое несёшь? Какой ещё base64? Зачем он те...

это один из способов отправлять файлы... если в нормальном случае мы отправляем формдату и ставим multipart то никаких проблем.. в сокете такого нет

Yevhen- Автор вопроса
ᅠ ᅠ
Ты что такое несёшь? Какой ещё base64? Зачем он те...

при всем уважении, но я пока от тебя не увидел ни одного годного совета, сначала ты мне скинул пример с доки который я и юзаю а вопрос был в другом потом ты мне посоветовал вообще не юзать сокет, а потом просто говоришь что я все не так делаю...

Yevhen
это один из способов отправлять файлы... если в но...

ФормДата это ненормальный случай. От него мало плюсов в SPA + http/2/3. FD избыток прошлого!

Yevhen- Автор вопроса

ну как сказать. например rtkquery который я так же решил изучить выяснилось что не хочет принимать просто обьект где я укажу content/type, он видел его криво, но если запихнуть все в формдату то все ок, и контент тайп не нужно указывать

ᅠ ᅠ
ФормДата это ненормальный случай. От него мало плю...

зависит от реализации сервера, вообще протокол http это все таки протокол отключенного соединения, клиент не обязан быть подсоединенным

Yevhen
ну как сказать. например rtkquery который я так же...

Офигенный у тебя мессенджер!!! На фронте ещё и redux. Жесть.

Yevhen- Автор вопроса
ᅠ ᅠ
Офигенный у тебя мессенджер!!! На фронте ещё и red...

а ты что предлагаешь? на нативном js??? react, redux toolkit, express prisma. современные актуальные технологии что не так с ними?

Agent-G
зависит от реализации сервера, вообще протокол htt...

Это выгодно для загрузки нескольких файлов. http/2 позволит загружать множество файлов одновременно без установки новых соединений, что даёт большое преимущество во всех планах.

Yevhen- Автор вопроса
ᅠ ᅠ
Всё не так!

сколько ты лет уже работаешь в айти?

ᅠ ᅠ
Это выгодно для загрузки нескольких файлов. http/2...

современные сайты используют клауды для защиты от бот трафика, там корректно обрабатывается подобная пересылка данных?

Yevhen
а ты что предлагаешь? на нативном js??? react, red...

express.. современные актуальные технологии Но это не точно

Yevhen- Автор вопроса
Алексей Попов
express.. современные актуальные технологии Но это...

следующий левел это nest.js, а самый продвинутый это serverless технологии...

Yevhen
следующий левел это nest.js, а самый продвинутый э...

Экспресс устарел лет 5 назад. Но с ним очень много статей, курсов, примеров. А ещё он очень простой, поэтому для обучения подходит (да что уж там, наличие экспресса в большинстве проектов - не самая большая их проблема). Актуальный фреймворк примерно того же уровня абстракции - fastify Нест - фактически стандарт сейчас, но на любителя (в нём хватает минусов, с ним хватает проблем) Serverless это вообще buzzword. Наверное потому и сложно

Yevhen- Автор вопроса
Алексей Попов
Экспресс устарел лет 5 назад. Но с ним очень много...

nustify nest, как я понимаю просто расширенная надстройка над express, под капотом все равно он

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта