Как, используя потоки Node, скачать с сервера файл + отдельную строку?08.09.2021, 16:33. Показов 1993. Ответов 5
Всем привет.
Задача такова: клиент отправляет через fetch() запрос на скачивание файла с сервера. Нужно отправить ему файл + некую строку с отчётом о проделанной операции. В скачивании файла ничего трудного нет:
0
|
||||||
| 08.09.2021, 16:33 | |
|
Ответы с готовыми решениями:
5
Как скачать файл с http сервера, если директория неизвестна? Через командную строку Текстовый файл. В новый файл перенести каждое слово как отдельную строку. В новый файл перенести каждое слово как отдельную строку |
| 10.09.2021, 00:14 [ТС] | ||||||
|
Я в итоге стал использовать res.write().
Раз уж зашла речь об отправке файла + строки, поделюсь, как реализовал это. В общем, в ответе нужно передать непрерывную последовательность бинарных данных, представляющих собой СтрокаСДлинойСтрокиОтчёта + СтрокаОтчёта + Файл. На клиенте всё это дело будет распарсиваться - сначала получат длину строки отчёта, потом, зная её, выцепят сам отчёт, а потом, отсоединив файл от всего этого, предоставят браузеру его сохранить где-то там у себя в "Загрузках". Проблема вышла с передачей длины отчёта, поскольку хз, какова будет эта длина, и сколько байтов займёт выражающее её число (а не зная, сколько байтов, как клиент его получит?). Может, я просто ещё неуч, но я так и не нашёл способ это выяснить и в итоге решил задать, что СтрокаСДлинойСтрокиОтчёта всегда состоит из 10 символов - т.е., 10 байт в кодировке utf8. Если длина отчёта менее, чем десятизначная (да уж наверное!), оставшиеся места заполняются пробелами. Клиент там у себя срежет их через trim(). Если знаете, как сделать лучше - буду рад подсказке) В итоге получилось примерно следующее:
0
|
||||||
|
|
|
| 10.09.2021, 00:56 | |
|
Возможно, можно сгенерировать случайную строку, достаточно длинную для того, чтобы исключить возможность случайного совпадения, которая будет известна как серверу, так и клиенту, и эту строку использовать как разделитель между Строкой_отчёта и Файлом?..
0
|
|
|
123 / 98 / 15
Регистрация: 02.02.2014
Сообщений: 346
|
|
| 10.09.2021, 01:10 | |
|
А клиенту прямо на скачивание отдавать? если чтобы просто показать, может тогда проще каким base_64 и всё это в json
0
|
|
| 10.09.2021, 03:36 [ТС] | |||
|
Да, речь идёт именно о скачивании. Есть сайт с хранилищем картинок, юзер имеет возможность их скачивать. Если он хочет скачать одну картинку, отдаём её саму, если больше одной - создаём на сервере zip-архив из нужных картинок и отдаём его. Вот тут и нужен отчёт, т.к., в теории, могут быть ошибки при создании архива (например, не все файлы удалось добавить), и клиенту надо об этом сообщить. Плюс, в отчёте (он представляет собой json-объект, превращённый в строку) содержится и имя файла-архива. Если скачивается одна картинка, то, в принципе, можно обойтись без отчёта. Требуется как-то передать имя файла, но это можно сделать в заголовках, применив ф-ю Express'а res.attachment(). Однако мне и тут больше нравится вариант с отчётом: во-первых, единообразие упрощает код, и на сервере, и на клиенте, во-вторых, там весьма черезжопный способ извлечения имени файла из заголовка, с помощью строковых функций. В идеале нужен способ как-то записать Number в буфер (класс Buffer), а потом прочитать его оттуда. Но среди вариантов метода Buffer.from() я не нашёл того, что позволяет делать буфер из целого числа любой величины. Может, там есть какие-то ещё методы - пока нет времени особо вникать...
0
|
|||
| 10.09.2021, 03:36 | |
|
Помогаю со студенческими работами здесь
6
Как правильно скачать файл с FTP сервера Как скачать файл размером 11 Мб с FTP-сервера? Как скачать файл с кодом рнр, с сервера? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|