我们有一个使用 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()));
}
};
}
最佳答案
根据When to encode space to plus (+) or %20?您需要调整
that + means a space only in application/x-www-form-urlencoded content
您需要调整 header 中的编码。
关于Java Wicket 1.5.6 : File name on download is url encoded, 将空格转换为加号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56464895/