Codzienne archiwa: 20 czerwca 2012

Pobieranie plików z nazwami bez krzaków

Ostatnio w pracy toczę boje z serwisami REST i przy okazji tworzenia serwisu do upload‚u i download‚u plików natrafiłem na ciekawy, dawno temu utworzony przeze mnie zlepek kodu. Jako że czasami moja dawna twórczość mnie zachwyca, poniżej ten fragment zacytuję :)

public String encodeFilename(String filename, String userAgent) throws UnsupportedEncodingException {
  if (userAgent.contains("MSIE") || userAgent.contains("Opera")) {
    return URLEncoder.encode(filename, "UTF-8").replace("+", "%20");
  } else {
    return "=?UTF-8?B?" + new String(Base64.encodeBase64(filename.getBytes("UTF-8"))) + "?=";
  }
}

No i po co to komu? Ano po to, aby nadać pobieranemu plikowi nazwę z naszymi rodzimymi krzaczkami. Nie będę się zagłębiał w to, czemu tak jest, wystarczy wiedzieć, że prawie wszystkie przeglądarki nie odczytają poprawnie nazwy pliku przekazanej poprzez parametr nagłówka Content-Disposition. Co więcej, różnym przeglądarkom trzeba serwować zakodowaną nazwę pliku w nieco inny sposób.

Czytaj więcej »