"Если вдруг открылся люк, не пугайся, это глюк!" (с) Если что-то работает не так, вы нашли ошибку или опечатку в программе — вам в этот раздел
Аватара пользователя
1viktor
Добрый день.

Столкнулись с "плавающей" проблемой. Когда вставляется картинка из буфера обмена(скриншотер lightshot, делается скриншот и сразу в буфер обмена, без сохранения в файл), у пользователя(отправитель) который отправляет все работает корректно, а у других пользователей(получатели) картинка не отображается.

У получателя отображается вот так:
image002.jpg

На клике по картинке(превью говорящее об ошибке) появляется такая ошибка:
image001.jpg


На сервере в логе следующие строки:
Код: Выделить всё
[2024.26.11 08:38:25] [WARN]: FileSize: 151945
[2024.26.11 08:38:25] [WARN]: Upload file - 523777196b94625ba65a6b10bd26d3a19bbcd841.png from User: regular client SHA1: 523777196b94625ba65a6b10bd26d3a19bbcd841
[2024.26.11 08:38:25] [WARN]: SHA1 (undefined) equals: false
[2024.26.11 08:38:31] [ERROR]: fileCache error: ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\523777196b94625ba65a6b10bd26d3a19bbcd841.png'
[2024.26.11 08:38:31] [ERROR]: Incorrect url: 523777196b94625ba65a6b10bd26d3a19bbcd841.png
[2024.26.11 08:38:31] [ERROR]: [192.168.0.112] SendFile Error:ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\523777196b94625ba65a6b10bd26d3a19bbcd841.png'
[2024.26.11 08:38:31] [WARN]: cacheHandler, Change access time: c:\ProgramData\MyChat Server\files\ - ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\523777196b94625ba65a6b10bd26d3a19bbcd841.png'
[2024.26.11 08:38:33] [ERROR]: fileCache error: ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\523777196b94625ba65a6b10bd26d3a19bbcd841.png'
[2024.26.11 08:38:33] [ERROR]: Incorrect url: 523777196b94625ba65a6b10bd26d3a19bbcd841.png


Файла 523777196b94625ba65a6b10bd26d3a19bbcd841.png на сервере действительно нет, но по логу он загружен, а также у отправителя всё отображается корректно.

Данная ошибка появляется далеко не всегда, несколько раз в месяц. Можно отправить, а потом тебе напишут, что не видят, пробуешь также новый скриншот отправить и всё получается. Первый раз столкнулись в мае этого года. Сейчас стоит последняя версия 2024.4.2. Ошибка происходит на разных рабочих станциях.

Также пользователи отметили, что если скриншот сохранить в файл и потом отправить, то всё работает корректно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
1viktor
Заголовок не совсем корректный. Скопировал из темы https://nsoft-s.com/forum/viewtopic.php?f=40&t=8112.

Правильно "Ошибка при вставке напрямую изображений из буфера обмена"
Аватара пользователя
Алексей Пикуров
Такие проблемы сложнее всего ловить :) Нужна последовательность действий, которая гарантированно приводит к проблеме, тогда можно попробовать её повторить.

Тему я поменял.
Аватара пользователя
Алексей Пикуров
Запись в логе:

Код: Выделить всё
[2024.26.11 08:38:25] [WARN]: SHA1 (undefined) equals: false

теперь не будет появляться, мы немного подкрутили код веб-сервера. Но пока могу предположить, что при вставке картинки из буфера обмена и отправке её на сервер, она не заливается до конца. Соединение обрывается, и файл "поломанный", после этого сервер его удаляет.

Мы дополнили серверный лог, теперь будет чуть больше информации для анализа, после обновления на новую версию посмотрите ещё раз.
Аватара пользователя
1viktor
Спасибо! Обновлюсь и подожду повтора ошибки
Аватара пользователя
1viktor
Добрый день! Ошибка периодически повторяется. Сейчас обновились поймали на текущей версии.

Скрин ошибки
image001.jpg

Версия сервера
ksnip_20250310-173042.png


Логи с сервера
Код: Выделить всё
[2025.06.03 13:44:11] [ERROR]: [164.90.208.238] SendFile Error:ENOENT: no such file or directory, stat 'C:\Program Files (x86)\MyChat Server\node\server\www\lobby\HNAP1'

[2025.06.03 14:09:35] [WARN]: FileSize: 37875
[2025.06.03 14:09:35] [WARN]: Upload file - b0cfae478a3af8c94390315ae2acead833b3adde.png from User: regular client SHA1: b0cfae478a3af8c94390315ae2acead833b3adde
[2025.06.03 14:09:35] [WARN]: SHA1 (b0cfae478a3af8c94390315ae2acead833b3adde) equals: false
[2025.06.03 14:09:46] [ERROR]: fileCache error: ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:46] [ERROR]: Incorrect url: b0cfae478a3af8c94390315ae2acead833b3adde.png
[2025.06.03 14:09:46] [ERROR]: [192.168.0.112] SendFile Error:ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:46] [WARN]: cacheHandler, Change access time: c:\ProgramData\MyChat Server\files\ - ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:48] [ERROR]: fileCache error: ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:48] [ERROR]: Incorrect url: b0cfae478a3af8c94390315ae2acead833b3adde.png
[2025.06.03 14:09:48] [ERROR]: [192.168.0.30] SendFile Error:ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:48] [WARN]: cacheHandler, Change access time: c:\ProgramData\MyChat Server\files\ - ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:56] [WARN]: FileSize: 5266
[2025.06.03 14:09:56] [WARN]: Upload file - b3e78daa32efc6af24913a1cb7137fd931db7144.png from User: regular client SHA1: b3e78daa32efc6af24913a1cb7137fd931db7144
[2025.06.03 14:09:56] [WARN]: SHA1 (b3e78daa32efc6af24913a1cb7137fd931db7144) equals: false
[2025.06.03 14:09:59] [ERROR]: fileCache error: ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:59] [ERROR]: Incorrect url: b0cfae478a3af8c94390315ae2acead833b3adde.png
[2025.06.03 14:09:59] [ERROR]: [192.168.0.128] SendFile Error:ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:09:59] [WARN]: cacheHandler, Change access time: c:\ProgramData\MyChat Server\files\ - ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:10:07] [ERROR]: fileCache error: ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:10:07] [ERROR]: Incorrect url: b0cfae478a3af8c94390315ae2acead833b3adde.png
[2025.06.03 14:10:07] [ERROR]: [192.168.0.123] SendFile Error:ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:10:07] [WARN]: cacheHandler, Change access time: c:\ProgramData\MyChat Server\files\ - ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:11:35] [ERROR]: fileCache error: ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:11:35] [ERROR]: Incorrect url: b0cfae478a3af8c94390315ae2acead833b3adde.png
[2025.06.03 14:11:35] [ERROR]: [192.168.0.134] SendFile Error:ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'
[2025.06.03 14:11:35] [WARN]: cacheHandler, Change access time: c:\ProgramData\MyChat Server\files\ - ENOENT: no such file or directory, stat 'c:\ProgramData\MyChat Server\files\b0cfae478a3af8c94390315ae2acead833b3adde.png'

[2025.06.03 14:21:09] [WARN]: Unknown method: OPTIONS
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Андрей Раков
Если отправлять файл или картинку через скрепку, а не из буфера обмена, ошибка повторяется?
Аватара пользователя
1viktor
Если файл прикреплять, то всё работает как часы, никто не жаловался. Ошибка появляется при отправлении скриншота именно из буфера обмена. Это появилось по ощущения после обновлений в начале 2024 года. Ошибка по ощущениям(со слов пользователей) появляется 1 раз из 5-10 отправлений.

У пользователя который отправлял из буфера картинку всё отображается и открывается корректно. Но я так понял он откуда-то из локального кеша берет это файл, а не с сервера. Скрин с компьютера пользователя который отправлял картинку
Screenshot_1.png


Я так понимаю, что при отправке картинки происходит какая-то ошибка и на сервере файл не появляется, но в базе запись оставляется как будто всё хорошо и файл загрузился.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Q
Добрый день! Имеем периодически такую же ошибку после обновления на последнюю версию. Вставляется кусок эксель таблицы из буфера обмена.
Q
Здравствуйте! Скажите, планируется фикс этой проблемы?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
Я не могу повторить описанную проблему, поэтому не очень понятно, что нужно исправлять.
Q
Давайте я как-то помогу с диагностикой, очевидно, что это не частный случай...Скажите, что нужно сделать, я попробую потестировать.
Аватара пользователя
Алексей Пикуров
Файлы отправляются совершенно одинаково технически.

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

Очевидно, при аплоаде клиентское приложение не получило никаких ошибок и считает, что всё ок. Но на сервере файла по факту нет. Он не долился до конца, или кто-то его перехватил — тут надо разбираться на сервере, думаю.

Как минимум, стоит сделать две вещи:
1. Поставить в исключения антивируса/файрвола работу встроенного веб-сервера nodejs.
2. Включить https, чтобы усложнить контроль трафика с третьей стороны. В нашей практике были случаи, когда Касперский ломал трафик, буквально влезая своим носом в заголовки передаваемых файлов и портил их. Пока не включили шифрование :)
Q
У нас работает все в локальной сети(и сервер и клиенты), я правильно понимаю, что в этом случае, 2ой пункт неактуален? или все-таки включить шифрование? И шифрование имеется ввиду в разделе "шаблоны настроек клиентов" - галочка "использовать шифрование трафика"?
Аватара пользователя
Алексей Пикуров
Шифрование актуально, если вы не хотите, чтобы антивирусы/файрволы вмешивались в процесс передачи файла.
И шифрование имеется ввиду в разделе "шаблоны настроек клиентов" - галочка "использовать шифрование трафика"?

Нет, как я уже сказал, речь про шифрование для веб-сервера. Справка. Можете просто тестовый сертификат включить, он хоть и не валидный, но хоть что-то для теста лучше, чем ничего.
Q
А подскажите, как дефолтный включить? Это тут делается?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Андрей Раков
Можете сгенерировать самостоятельно.

Качаем OpenSSL: https://slproweb.com/products/Win32OpenSSL.html - Win64 OpenSSL v3.4.1 Light

Читаем инструкцию полученную от гпт-шки:
1. Создайте приватный ключ (KEY)
Код: Выделить всё
openssl genpkey -algorithm RSA -out localhost.key -pkeyopt rsa_keygen_bits:2048

2. Создайте конфигурационный файл (например, openssl.cnf)
Код: Выделить всё
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_ca  # Используем стандартное имя секции для расширений

[dn]
CN = Localhost
C = RU
ST = Moscow
L = Moscow
O = Local Development
OU = IT

[v3_ca]  # Переименованная секция
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names  # Ссылка на альтернативные имена

[alt_names]
IP.1 = 192.168.1.100  # Ваш локальный IP

3. Сгенерируйте самоподписанный сертификат (CRT)
Код: Выделить всё
openssl req -x509 -new -key localhost.key -days 3650 -out localhost.crt -config openssl.cnf -extensions v3_ca

Что получится:
Приватный ключ: localhost.key
Сертификат: localhost.crt
-------

Эти файлы загружаете на сервере в настройках вер-сервера и устанавливаете порт 443 или 8433, если 443 занят.

Теперь при открытии админки браузер выдаст предупреждение, что не может проверить сертификат, но это не страшно, нажимаете на странице "дополнительно/подробнее" -> ссылка "... перейти на сайт ..."

Файлы будут передаваться по зашифрованому соединению и антивирус не сможет их изменить.
Аватара пользователя
1viktor
Если скрепкой — считается контрольная сумма, идёт запрос на сервер, если такого нет, загружается файл на сервер. Если картинка из буфера обмена, то сначала сохраняется на диск, в локальный кеш, а потом, как скрепкой.


В том и проблема, что скрепкой ВСЕГДА работает без ошибок, а из буфера обмена 10-20% не доходит до сервера. И если отправка файла на сервер проходит одинаково, то проблема точно не на сервере или есть отличие в отправке файла из локального кэша и файла из скрепки.

Когда файл не доходит до сервера, в локальный кэш он попадает, т.е. на локальном компе он показывается как правильно отправившийся.


P.S. По датам обновлений не скажу точно, но в 2023 году такой проблемы не было точно. На текущий момент эта проблема уже больше года и людей уже начинает напрягать
Аватара пользователя
1viktor
Очевидно, при аплоаде клиентское приложение не получило никаких ошибок и считает, что всё ок. Но на сервере файла по факту нет. Он не долился до конца, или кто-то его перехватил — тут надо разбираться на сервере, думаю.


Я правильно понимаю, что сервер записывает в базу запись, о полученном файле, не проверяя его наличия? Т.е. когда отправляем файл на сервер: клиент отправляет файл, сервер записывает данные о файле в базу, начинает принимать файл и в каком-то случае, когда файла на месте не оказалось, все равно отвечает клиенту что все хорошо?

Если это так, то все равно странно, что на сервер влияет выбор файла на клиенте из скрепки или из буфера обмена
Q
Установил утилиту, создал файл cnf, прописал локальный IP. При попытке запустить указанный скрипт, получаю
Код: Выделить всё
Can't open "openssl.cnf" for reading, No such file or directory
A0430000:error:80000002:system library:BIO_new_file:No such file or directory:crypto\bio\bss_file.c:67:calling fopen(openssl.cnf, r)
A0430000:error:10000080:BIO routines:BIO_new_file:no such file:crypto\bio\bss_file.c:75:


Куда я этот файл только не совал, создавал переменные среды с путем к нему, выполнял команды set
Код: Выделить всё
OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\bin\openssl.cnf
, переименовывал его в cfg, результат нулевой. [smilie=dash3.gif]
Аватара пользователя
Андрей Раков
2Q

Деинсталируйте openssl и заново установите, но при установке укажите размещение ехе не в системной папке, а в месте установки bin...

Далее все операции делайте в папке рядом сopenssl.exe
Аватара пользователя
Андрей Раков
Также укажите путь в инсталляции без пробелов и не в програм файлз
Q
Андрей, сертификаты создать получилось. Теперь у нас выполнено 2 пункта из рекомендаций выше, будем наблюдать, проблема проявляется не всегда
Аватара пользователя
1viktor
У нас изначально был HTTPS настроен
Аватара пользователя
1viktor
Но по моему, в нашем случае это никак не влияет, поскольку локальные клиенты(на которых собственно и возникают проблемы) подключаются не по https. По https подключаются web и android клиенты
ksnip_20250409-140100.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Q
У нас тоже клиенты десктопные, сервер в локальной сети... [smilie=search.gif]
Аватара пользователя
Алексей Пикуров
Я правильно понимаю, что сервер записывает в базу запись, о полученном файле, не проверяя его наличия? Т.е. когда отправляем файл на сервер: клиент отправляет файл, сервер записывает данные о файле в базу, начинает принимать файл и в каком-то случае, когда файла на месте не оказалось, все равно отвечает клиенту что все хорошо?

Нет, неправильно. Сервер не записывает в базу информацию о полученном файле. Сервер записывает в базу только сообщение, в котором есть информация про хеш файла, это сообщение генерирует и отправляет клиент после того, как получает информацию от сервера о том, что файл уже существует, если идёт повторная отправка. Либо, после того, как файл успешно залит на сервер.

Если это так, то все равно странно, что на сервер влияет выбор файла на клиенте из скрепки или из буфера обмена

Нет, никак не влияет, файлы отправляются абсолютно одинаково.
Аватара пользователя
Алексей Пикуров
Но по моему, в нашем случае это никак не влияет, поскольку локальные клиенты(на которых собственно и возникают проблемы) подключаются не по https.

Влияет, потому что речь не про подключение, а про передачу файлов. Файлы передаются всегда по http/https.

Если кто-то вмешивается в процесс передачи данных — включите шифрование https, чтобы антивирус/файрвол или какой там у вас софт, не мог перехватывать и портить трафик между клиентом и сервером.
Аватара пользователя
1viktor
Влияет, потому что речь не про подключение, а про передачу файлов. Файлы передаются всегда по http/https.


Ok, понял, принял.

Но видимо это в моем случае никак не влияет, потому что https был всегда включен(letsencrypt).
ksnip_20250416-142229.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
1viktor
отправляет клиент после того, как получает информацию от сервера о том, что файл уже существует, если идёт повторная отправка. Либо, после того, как файл успешно залит на сервер.


т.е. в нашем случае
Либо, после того, как файл успешно залит на сервер.
, т.к. файл(из буфера) отправляется первый раз.

И получается что сервер сообщает клиенту что файл успешно залит на сервер, хотя на самом деле это не всегда так, т.е. сервер после получения не проверяет наличие файла на дисках.

Нет, никак не влияет, файлы отправляются абсолютно одинаково.

Хотелось бы что бы это было так, но как минимум выглядит это не так. Проблема возникает у нас только при отправке из буфера обмена, при оправки файлов через скрепку никто не жаловался(уточнил у пользователей, ни разу такого не случалось). Видимо где-то разница есть.
Аватара пользователя
Алексей Пикуров
Добавили специальную проверку на сервер, если не сошлась контрольная сумма, на клиент будет отправлена ошибка вида:
Код: Выделить всё
[22:44:19] [ERROR] Ошибка #0392: ошибка при отправке файла, не совпадает контрольная сумма (size: 258340, sha1: 54103c085219b7b7aae22770fbdefed96df12b89)

По размеру в байтах и sha1 можно будет сличить оригинал на клиенте, и то, что по факту получил сервер. Хоть какая-то дополнительная инфа.

Будет обновление в ближайшие дни. Нужно будет обновить сервер и клиентов (они обновятся автоматически).