Download af filer

14523719_sHvis du har genereret en fil, f.eks. en Excel eller PDF fil og ønsker at brugeren kan downloade den fra en XPages, så kan det nemt gøres med denne lille Download class.

Her et simplificeret eksempel, først en lille java bean der kan læse en fil fra disken og downloade den hos brugeren:

import org.apache.commons.io.FileUtils;
import dk.xpages.Download;

class MyBean implements Serializable {
	public void download() {
		byte[] myFile = FileUtils.readFileToByteArray("c:\temp\file.txt");
		Download download = new Download();
		try {
			download.save(getByteArray(), getFilename());
		}
	}
}

På en XPages kan download linket laves således:

<xp:link escape="true" text="Download">
	<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
		<xp:this.action><![CDATA[#{javascript:myBean.download();}]]></xp:this.action>
	</xp:eventHandler>
</xp:link>

Links

2 tanker om "Download af filer"

  1. En mindre forbedring til din Download klasse vil være til tilføje Content-Length i header på dit svar.

    — klip —
    response.setCharacterEncoding(charset);
    response.setHeader(“Content-disposition”, “attachment; filename=” + filename);
    — tilføjelse start —
    response.setHeader(“Content-Length”, new File(“c:\temp\file.txt”).length());
    — tilføjelse slut —
    OutputStream output = response.getOutputStream();
    output.write(data);
    — klip —

    Content-Length er valgfri i http 1.1, men bruger du http://docs.oracle.com/javase/7/docs/api/java/net/HttpURLConnection.html eller http://hc.apache.org/httpclient-3.x/ til at hente filen med vil HttpURLConnection/HttpGet lukke forbindelsen inden filen er læst.

    Thomas Adrian har lagt en XSnippet på OpenNTF.org, men glemmer også Content-Length -> http://openntf.org/XSnippets.nsf/snippet.xsp?id=display-and-download-any-files-from-the-server-file-system-or-from-a-mapped-drive

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

*