Bueno, espero no confundir en la
explicación.
Te envio el export "descargaDesdeString.xpz", ese
proc es útil si tenés el contenido del archivo en una variable string, lo
invocás y listo.
Si ya tenés el archivo guardado en disco y querés
enviarselo al cliente te envío el fuente de más abajo (es una parte de un
gran fuente, espero no tener errores de sintaxis).
&Planilla debe ser el nombre del archivo con
extensión, por ejemplo: "miarchivo.xls".
Este código consulta por el valor de la variable
&modo, si la misma vale "I" significa que la descarga es "Inline" es decir,
se sugeriría al browser que abra el archivo en pantalla (no se puede obligar al
browser a hacerlo). En cualquier otro caso se sugiere al browser que lo descarge
a disco.
Las variables &nomArch, &ext,
etc. podés definias como V(40) (varchar 40).
Como ves este código invoca al reporte RFCDOC00,
por lo tanto te envio el export del mismo (no prestes atención a los comentarios
del cabezal de este fuente porque son relativos al contexto del proyecto en el
que fueron hechos).
Suerte! cualquier cosa a las órdenes.
java String rutaOrigen;
java
javax.servlet.http.HttpServletResponse respuesta;
java
java.io.BufferedInputStream bis = null;
java
java.io.BufferedOutputStream bos = null;
java int bytesRead;
java final
int BLOQUE = 2048;
java byte[/**/] buff;
java try {
java rutaOrigen = "C:\\Archivos de programa\\Apache
Software Foundation\\Tomcat 5.5\\webapps\\Inicio\\Temp\\" +
trim(&Planilla);
java [!&nomArch!] =
[!&nomArch!].substring( 0, [!&nomArch!].lastIndexOf( "." )
);
java [!&ext!] = "." + rutaOrigen.substring(
rutaOrigen.lastIndexOf( "." ) + 1
);
If Upper( &modo ) =
'I'
Call( RFCDOC00, &ext, &descripcion, &tipoContenido
)
&contDisposition =
"Inline;Filename="
Else
// Se codifican aquellos caracteres no US-ASCII para que el nombre del archivo
sea
desplegado
// correctamente en el cuadro de
descarga.
java [!nomArch!] =
java.net.URLEncoder.encode( [!&nomArch!], "UTF-8" ).replace( "+", " " );
&tipoContenido =
"application/octet-stream"
&contDisposition =
"Attachment;Filename="
EndIf
java respuesta = ( ( HttpContextWeb )
httpContext ).getResponse();
java
respuesta.reset();
java respuesta.setContentType(
[!&tipoContenido!] );
java respuesta.setHeader(
"Content-disposition", [!&contDisposition!] + [!&nomArch!] +
[!&ext!] );
java bis = new
java.io.BufferedInputStream( new java.io.FileInputStream( rutaOrigen )
);
java bos = new java.io.BufferedOutputStream(
respuesta.getOutputStream() );
java buff = new
byte[BLOQUE];
java while( -1 != ( bytesRead =
bis.read( buff, 0, buff.length ) ) )
{
java bos.write( buff, 0,
bytesRead );
java }
java } catch(
java.lang.Exception e ) {
java
System.out.println ( e.getMessage() );
java } finally
{
java try
{
java if ( bis != null )
{
java
bis.close();
java
}
java if ( bos != null )
{
java
bos.close();
java
}
java } catch( Exception e )
{
java System.out.println (
e.getMessage() );
java }
java }