Java Wicket 1.5.6: имя файла при загрузке кодируется в URL, преобразуя пробелы в знаки плюс - PullRequest
0 голосов
/ 05 июня 2019

У нас есть ссылка для загрузки файла, написанная с использованием Wicket, и, несмотря на все наши усилия, мы не можем получить ее, чтобы файл мог быть загружен с пробелами ... имя файла всегда кодируется так, что пробелы преобразуются в плюс '+ 'знаки.

Пример: «My File.xls» преобразуется при загрузке в «My + File.xls»

Смотрите код, который мы используем ниже. Мы попытались поиграть с несколькими вариантами, но проблема остается. Надеясь, что кто-нибудь поможет нам сузить область поиска проблемной области.

Кроме того, resourceStream.downloadLink.prepareFileName() возвращает здесь «My File.xls», исключая кавычки. Мы попытались заключить имя файла в кавычки, которые, похоже, не работали.

 public DownloadLinkListActionCell(String componentId, IModel<DownloadLink> rowModel) {
    super(componentId, rowModel);

    downloadLink = rowModel.getObject();

    IModel fileModel = new AbstractReadOnlyModel(){
        public Object getObject() {
            return generateFile();
        }
    };

    Link downloadFileLink = new Link("download") {
        @Override
        public void onClick() {
            File downloadFile = (File) fileModel.getObject();
            IResourceStream resourceStream = new FileResourceStream(
                    new org.apache.wicket.util.file.File(downloadFile));
            getRequestCycle().scheduleRequestHandlerAfterCurrent(
                new ResourceStreamRequestHandler(resourceStream,downloadLink.prepareFileName())
                {
                    @Override
                    public void respond(IRequestCycle requestCycle)
                    {
                        super.respond(requestCycle);
                    }
                }.setContentDisposition(ContentDisposition.ATTACHMENT)
                            .setCacheDuration(Duration.NONE)
            );
            setResponsePage(DownloadLinkPage.class, PageParametersBuilder.uniqueId(downloadLink.getId()));
        }
    };

}

1 Ответ

1 голос
/ 05 июня 2019

В соответствии с Когда кодировать пробел в плюс (+) или% 20? Вам необходимо настроить

, что + означает пробел только в приложении / x-www-form-рленкодированный контент

вам нужно настроить кодирование в заголовке.

...