Вопрос по primefaces – Primefaces fileDownload неанглийские имена файлов повреждены
Я использую Primefaces 3.2. У меня проблемы с использованием простых файлов fileDownload. Я могу загрузить файлы и сохранить их неанглийское имя на сервере (в моем случае это русский язык). Однако, когда я использую p: fileDownload для загрузки выгруженных файлов, я не могу использовать русские буквы, так как они испорчены. Кажется, что конструктор класса DefaultStreamedContent принимает только латинские буквы. Я делаю все в соответствии с демонстрацией на сайте основных лиц, как показано ниже.
<code>public FileDownloadController() { InputStream stream = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/images/optimusprime.jpg"); file = new DefaultStreamedContent(stream, "image/jpg", "downloaded_optimus.jpg"); } </code>
Любые идеи, как я могу решить мою проблему?
Заранее спасибо.
исправлено в грядущем PrimeFaces 6.2, но для более ранних версий необходимо применить приведенное ниже исправление. В ссылке в комментариях ниже была опубликована ссылка на проблему PrimeFaces, в которой содержится информация о том, что приведенное ниже исправление работает для Chrome, IE и Opera, но не для FireFox (ни одна версия не упоминается, и не упоминается «Edge»)
Workaround
Попробуйте закодировать ваше имя файла вapplication/x-www-form-urlencoded
MIME формат (URLEncoder).
Пример:
public StreamedContent getFileDown () {
// Get current position in file table
this.currentPosition();
attachments = getAttachments();
Attachment a = getAttachmentByPosition( pos, attachments );
FileNameMap fileNameMap = URLConnection.getFileNameMap();
// Detecting MIME type
String mimeType = fileNameMap.getContentTypeFor(a.getAttachmentName());
String escapedFilename = "Unrecognized!!!";
try {
// Encoding
escapedFilename = URLEncoder.encode(a.getAttachmentName(), "UTF-8").replaceAll(
"\\+", "%20");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
// Preparing streamed content
fileDown = new DefaultStreamedContent( new ByteArrayInputStream( a.getAttachment() ),
mimeType, escapedFilename);
return fileDown;
}
Attachment
Error: User Rate Limit ExceededURLDecoder