Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кракозябра в названии файла при скачивании, Apache Commons IO 
V
    Опции темы
m0zg
Дата 30.3.2012, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.7.2007

Репутация: 2
Всего: 2



Вроде были похожие темы, но с решениями не очень. Вот кусок кода:

Код

response.setHeader("Content-Disposition", "inline;filename=\"" + md.getFileName() + "\"");
OutputStream out = response.getOutputStream();
response.setContentType(md.getContentType());
File f = new File(StringUtils.getPath() + md.getId() + "-" + md.getFileName());
fis = new FileInputStream(f);
IOUtils.copy(fis, out);


Проблема вобщем-то понятна из названия темы. Закачиваются файлы с русскими буквами в названии на сервер правильно, а вот скачиваются уже с иероглифами вместо русских букв, содержимое файла не изменяется.
PM MAIL   Вверх
MisterCleric
Дата 30.3.2012, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
Проблема лежит в в кодировке символов. При чем каждый браузер это название файла отображает по своему.
А вот тебе и решение:
Код

public class ContentDispositionBuilder {
    private static final String ENCODING = "UTF-8";

    private HttpServletRequest request;

    private HttpServletResponse response;

    private String userAgent;

    public ContentDispositionBuilder(HttpServletRequest request, HttpServletResponse response) {
        this.request = request;
        this.response = response;
    }

    public void build(String originalFileName) throws UnsupportedEncodingException {
        userAgent = request.getHeader("User-Agent").toLowerCase();

        String fileName = buildFileName(originalFileName);

        String fileNameAttr = "filename=";

        if (isIE() || isChrome()) {
            fileName = "\"" + fileName + "\"";

        } else {
            fileNameAttr = fileNameAttr.replace("=", "*=") + ENCODING + "''";
        }

        response.setHeader("Content-Disposition", "attachment;" + fileNameAttr + fileName);
    }

    private String buildFileName(String fileName) throws UnsupportedEncodingException {
        return URLEncoder.encode(fileName, ENCODING).replaceAll("\\+", "%20");
    }

    private boolean isFirefox() {
        return userAgent.contains("gecko");
    }

    private boolean isIE() {
        return userAgent.contains("msie");
    }

    private boolean isOpera() {
        return userAgent.contains("opera");
    }

    private boolean isChrome() {
        return userAgent.contains("webkit");
    }
}



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
m0zg
Дата 30.3.2012, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.7.2007

Репутация: 2
Всего: 2



Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.