Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
 Аватар для TurboDuck
50 / 49 / 13
Регистрация: 23.11.2015
Сообщений: 401

Имена русских файлов при загрузке на сервер

26.11.2018, 08:06. Показов 6634. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые коллеги

Что делать с русскоязычными именами файлов? Стек: Spring Boot / Java 8. Бэк сохраняет и отдает без проблем русские буквы в именах файлов. Однако при скачивании вместо русских букв все символы заменяются на символ "нижнее подчеркивание" _

Я понимаю, что по Фен Шую правильно кодировать имя файла хешем, если много файлов раскидывать по папкам с именем например из первых двух букв хэша, а имя файла хранить в БД.

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

Пробовал прокидывать разные HTTP заголовки при возврате ResponseEntity<Resource> например так, результата нет:
Java
1
response.setHeader("Content-Disposition", "attachment; filename*=\"utf8'ru-ru'"+ResultFileName+"\"")
Я так понимаю, что при загрузке файла пробовать конвертировать имя файла в UTF-8 - это глупость, так как зависит от файловой системы.

Может использовать транслитирацию? Буду рад любым идеям, заранее спасибо!
Миниатюры
Имена русских файлов при загрузке на сервер  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2018, 08:06
Ответы с готовыми решениями:

При отправки на сервер русских букв сервлет получает знаки вопроса. Как быть?
Hi, All! При отправки на сервер русских букв сервлет получает что-то вроде '?????2??' Как быть ? Как можно решить эту проблему...

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

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

2
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
26.11.2018, 08:21
а это точно от бэка зависит? поди js глючит
0
 Аватар для TurboDuck
50 / 49 / 13
Регистрация: 23.11.2015
Сообщений: 401
26.11.2018, 09:25  [ТС]
xoraxax, да как раз с этим разбираюсь.
Встретив заголовок Content-Disposition" со значением "attachment; filename = ...", любой современный браузер выведет диалоговое окно сохранения или открытия файла, в котором в качестве имени файла будет присутствовать то, что указано в этом заголовке. Однако, если в именах файлов присутствует кириллица (как и любые другие не US-ASCII символы), имя файла будет отображено неправильно. Причём значение параметра charset в заголовке "Content-Type" на это никакого влияния похоже не оказывает.

Добавлено через 3 минуты
В интернете народ пишет: "Подверг имя файла URL-кодированию с нужной мне кодировкой (использовал utf8)." для решения... такое вообще возможно, для разных ОС используется разная кодировка и русский в каких кодировках только не бывает?

Добавлено через 19 минут
Ребят, нашел несколько костыльный вариант решения, но он для моего случая как раз подойдет, так как мне не критично оставлять русские символы в названии файла, в контексте других требований моей задачи:

В maven добавляем следующую зависимость:

XML
1
2
3
4
5
<dependency>
    <groupId>com.ibm.icu</groupId>
    <artifactId>icu4j</artifactId>
    <version>61.1</version>
</dependency>
Инициализируем так:

Перевод латиницы в русский CYRILLIC_TO_LATIN = "Latin-Russian/BGN"


Перевод русского в латиницу CYRILLIC_TO_LATIN = "Russian-Latin/BGN"

Java
1
2
3
Transliterator toLatinTrans = Transliterator.getInstance(CYRILLIC_TO_LATIN);
String result = toLatinTrans.transliterate(fileName);
System.out.println(result);
Тему можно закрывать. Если кто то подскажет какой то более красивый вариант - буду благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2018, 09:25
Помогаю со студенческими работами здесь

При множественной загрузке файлов на сервер загружается лишь один.
доброе время суток. такая ситуация: загружаю несколько файлов через &lt;input type=&quot;file&quot; multiple /&gt;, отправляю на сервер, но туда...

Написал простенький файловый сервер, ошибка при загрузке файлов
По-быстрому с целью ознакомления написал небольшой файловый сервер Из handle функции, если путь соответствует регулярному выражению,...

Еще раз о загрузке файлов на сервер
Здрасьте! Передо мной стояла задача загрузить файлы на сервер и вывести их на экран. Решил ее следующим скриптом. $dir =...

Неверное отображение русских символов при загрузке HTML в TextBox
Доброго времени суток. Пытаюсь вывести html сайтf в textbox (кодировка 1251), но идет некорректное отображение русских символов,...

Тормоз при открытии русских файлов ч/з DLL
День добрый всем! Создал вот такую ActiveX.dll Public Function Opening_File(tPath As String, tFile As String) As String Dim...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru