2015-01-19 3 views
0

У меня есть приложение, которое позволяет пользователям загружать некоторые файлы. Я запускаю его на VMware vFabric tc Server Developer Edition v2.9 (сервер по умолчанию в STS), и все в порядке. Но теперь мой сервер GlassFish, поэтому имя файла становится неправильным. Например - 30-60 от 19.01.2015.txtНеверное имя файла на разных серверах

Firefox: 30-60_ (без расширения)

Chrome: 30-60_ _19.01.2015.txt

Что неправильно? Код:

response.setHeader(
       "Content-disposition", 
       "attachment;filename=" 
         + BufferUtil.getEncoded(distributionService.get(id) 
           .getTitle(), request) + ".txt"); 
response.setContentType("text/xml, text/plain");  

BufferUtil.getEncoded:

public static String getEncoded(String text, HttpServletRequest request) { 
     String userAgent = request.getHeader("user-agent"); 
     boolean isInternetExplorer = (userAgent.indexOf("MSIE") > -1); 
     text=text.replace(' ', '_'); 

     try { 
      byte[] fileNameBytes = text 
        .getBytes((isInternetExplorer) ? ("windows-1250") 
          : ("utf-8")); 
      String dispositionFileName = ""; 
      for (byte b : fileNameBytes) { 
       dispositionFileName += (char) (b & 0xff); 
      } 
      return dispositionFileName; 
     } catch (UnsupportedEncodingException ence) { 
      ence.printStackTrace(); 
      return null; 
     } 
    } 
+0

содержит ли имя файла любые не-ASCII символов? – immibis

+0

Да, это так ... – Tony

ответ

2

Пожалуйста, попробуйте:

java.net.URLEncoder.encode(distributionService.get(id).getTitle() + ".txt", "UTF-8") 

вместо

BufferUtil.getEncoded(distributionService.get(id) 
          .getTitle(), request) + ".txt"); 
+0

Firefox показывает '% D0% BE% D1% 82' вместо текста (не ASCII). Кроме того, Chrome использует один и тот же подход для нескольких символов, таких как '(' или ')'. – Tony

+0

Несмотря на то, что некоторые современные браузеры не универсальны, они могут соответствовать RFC6266, в котором говорится, что заголовок размещения контента, содержащий символы UTF-8, может быть указан как в следующем примере: Content-Disposition: attachment; filename = "EURO rates"; имя_файла * = utf-8 ''% e2% 82% ac% 20rates –

Смежные вопросы