You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Craig Jorgensen (JIRA)" <ji...@apache.org> on 2015/01/29 01:52:34 UTC
[jira] [Created] (WICKET-5826) Add setContentType to DownloadLink
Craig Jorgensen created WICKET-5826:
---------------------------------------
Summary: Add setContentType to DownloadLink
Key: WICKET-5826
URL: https://issues.apache.org/jira/browse/WICKET-5826
Project: Wicket
Issue Type: Improvement
Components: wicket
Affects Versions: 6.18.0
Reporter: Craig Jorgensen
Priority: Minor
I am generating an excel file when the DownloadLink is clicked on. Everything worked fine when I was running locally for development (meaning Excel would automatically start and my excel file would be loaded) but when I used our webdev server, the file would get appended with an ".htm" and the browser would try to display the excel file which resulted in garbage on the screen.
I eventually discovered that the contentType for the FileResourceStream in the DownloadLink::onClick() method was set to null and there is no way (that I know of to change it). I modified the DownloadLink slightly to allow this change. If there is a better way to handle this, I would like to know it. Otherwise, I would suggest adding my changes to the code.
Basically, I added a private member variable.
private String contentType = null;
to the DownloadLink class with a getter and a setter and modified the onClick() method to allow me to set the FileResourceStream ContentType.
@Override
public void onClick()
{
final File file = getModelObject();
if (file == null)
{
throw new IllegalStateException(getClass().getName() +
" failed to retrieve a File object from model");
}
String fileName = fileNameModel != null ? fileNameModel.getObject() : null;
if (Strings.isEmpty(fileName))
{
fileName = file.getName();
}
fileName = UrlEncoder.QUERY_INSTANCE.encode(fileName, getRequest().getCharset());
IResourceStream resourceStream = new FileResourceStream(new org.apache.wicket.util.file.File(file)) {
@Override
public String getContentType() {
return contentType;
}
};
getRequestCycle().scheduleRequestHandlerAfterCurrent(
new ResourceStreamRequestHandler(resourceStream)
{
@Override
public void respond(IRequestCycle requestCycle)
{
super.respond(requestCycle);
if (deleteAfter)
{
Files.remove(file);
}
}
}.setFileName(fileName)
.setContentDisposition(ContentDisposition.ATTACHMENT)
.setCacheDuration(cacheDuration));
}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)