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

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

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

27 ответов

16 просмотров

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

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Карта сайта