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)