Вопрос по primefaces – Primefaces fileDownload неанглийские имена файлов повреждены

4

Я использую 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>

Любые идеи, как я могу решить мою проблему?

Заранее спасибо.

Спасибо за ответ )). Nurjan
Извините за задержку: я не смог воссоздать, но здесь, где вы хотите посмотреть:code.google.com/p/primefaces/source/browse/primefaces/trunk/src/…  По сути, он построен поверх ApacheFileUpload и использует этот метод (parseRequest) для этого. Кроме того, убедитесь, что ваш набор символов правильный и он не транслируется в ASCII или что-то глупое, когда он сохраняет. Daniel B. Chapman
Вы имеете в виду файл, который я использовал? Как я могу связать это здесь? Я использовал файл .docx с русским именем. Если это не сложно для вас, вы можете создать любой файл .doc или .docx и дать ему имя на русском языке & quot; & # x422; & # x435; & # x441; & # x442; & # x43E; & # X432; & # x44B; & # x439; & # X444; & # X430; & # x439; & # x43B; & Quot; (Тестовый файл). Nurjan
Я заболел, но можете ли вы связать файл в качестве примера? Я разорвал этот сервлет на части 4 месяца назад, и я был бы рад запустить его через отладчик, если у меня есть что использовать. Daniel B. Chapman

Ваш Ответ

1   ответ
11

исправлено в грядущем 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;
    }
Error: User Rate Limit Exceeded Nurjan
Error: User Rate Limit Exceededgithub.com/primefaces/primefaces/issues/149
Error: User Rate Limit ExceededAttachmentError: User Rate Limit ExceededURLDecoder
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Nurjan

Похожие вопросы