У нас есть ссылка для загрузки файла, написанная с использованием 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()));
}
};
}