Red de conocimiento informático - Material del sitio web - Cómo escribir un programa de descarga usando código JSP, que es el tipo de interfaz de descarga que generalmente se encuentra en las páginas web. ¡Por favor, dame la respuesta~!

Cómo escribir un programa de descarga usando código JSP, que es el tipo de interfaz de descarga que generalmente se encuentra en las páginas web. ¡Por favor, dame la respuesta~!

El siguiente código no está organizado: se recomienda buscar documentos de Baidu, habrá mejores códigos y explicaciones, y la descarga del archivo debe descargarse con un paquete jar, debe descargar uno.

lt; @ page contentType = " texto/html; charset=GBK " pageEncoding = " GBK " gt

lt; .util.*, java.text.* " gt;

lt;!

/**

* Si se devuelve verdadero, se debe devolver 304 (HTTP_NOT_MODIFIED)

*/

checkFor304 booleano estático público ( HttpServletRequest req,

Archivo archivo )

{

//

// Haremos algún procesamiento de GET condicional (y Devuelve 304)

// Si el cliente ha configurado la siguiente información de encabezado, no intente 304.

//

// pragma: no-cache

// control-caché: no-cache

//

if ( " no-cache " .equalsIgnoreCase(req.getHeader( " Pragma " ))

|| " no-cache " .equalsIgnoreCase(req.getHeader( " cache-control: no-cache

// // // // Si el cliente establece la siguiente información de encabezado, no intente 304.

getHeader( " cache-control " )))

{

// Específicamente quiero una nueva copia

}

else < / p>

{

//

// HTTP 1.1 ETag tiene prioridad

//

String thisTag = Long. toString(file.lastModified());

String eTag = req.getHeader( " If-None-Match " );

if ( eTag != null )

{

if (eTag.equals(thisTag) )

{

devuelve verdadero

}

}

}

//

// A continuación, prueba if-modified-since

//

DateFormat rfcDateFormat = new SimpleDateFormat( " EEE, dd MMM yyyy HH: mm: ss z " );

Fecha de última modificación = new Fecha(file.info("lastModifiedTime:" lastModifiedTime);

if ( lastModifiedTime <= ifModifiedSince )

{

devuelve verdadero

}

}

else

{

prueba

{

String s = req.getHeader( " If-Modified- Since " );

if ( s != null )

{

Fecha ifModifiedSinceDate = rfcDateFormat.parse(s);

// log.info("ifModifiedSinceDate:" ifModifiedSinceDate);

if ( lastModified.before(ifModifiedSinceDate) )

{

devuelve verdadero

}

}

}

catch (ParseException e)

{

// log. info("ifModifiedSinceDate:" ifModifiedSinceDate);

if ( lastModified.warn(e.getLocalizedMessage(), e);

}

}

}

}

catch ( IllegalArgumentException e )

{

// Formato de encabezado de fecha/hora ilegal.

// Fallamos silenciosamente y devolvemos falso.

// FIXME: Realmente debería pasar a las etiquetas ET.

}

}

captura (IllegalArgumentException e)

{

captura (IllegalArgumentException e) p>

{

devuelve falso

}

gt

lt; > // String filePath = "c:/Documents.doc";

// Si es un archivo de ruta relativa en la APLICACIÓN WEB, utilice el siguiente código:

String filePath = application.getRealPath (" testDocument.htm ");

boolean isInline = false // Si se permite que el archivo se abra directamente en el navegador (si el navegador puede obtener una vista previa del contenido del archivo,

// luego se abrirá el archivo; de lo contrario, se solicitará una descarga)

// Borre el búfer para evitar que se agreguen líneas y espacios vacíos al contenido del archivo que se va a descargar. descargado

// Si el área del búfer no se borra, Tomcat llamará a Response.reset()

// java.lang.IllegalStateException: getOutputStream(); El navegador puede obtener una vista previa del contenido del archivo,

// luego se abrirá el archivo; de lo contrario, se le solicitará que lo descargue. getOutputStream() ha sido llamado

// Esta respuesta,

out.clear()

// {{ Lectura requerida de BEA Weblogic

// Corrige errores en Bea Weblogic. Error "getOutputStream() ha sido llamado para esta respuesta"

// Acerca del uso de la salida de secuencia de archivos para manejar las descargas de archivos:

// // Agregue respuesta.reset() y no todas > nuevas líneas, incluida la última

// {{{ BEA Weblogic debe leer las nuevas líneas, incluida la última

// Porque Application Server está procesando el jsp compilado; El contenido entre gt; y lt; generalmente se genera tal como está y el valor predeterminado es PrintWriter,

// y está utilizando una secuencia: ServletOutputStream. Esto equivale a intentar utilizar ambos mecanismos de salida en un servlet,

// y obtener el error: getOutputStream() ya ha sido llamado para esta respuesta

// Ver para más detalles Parte 2 de más Java Pitfills. Parte 33 Proyecto de nivel web: probando dos mecanismos de salida en un servlet 270

// Esto no es un problema para archivos de texto si hay saltos de línea, pero sí para otros formatos como AutoCAD, Word, Excel, etc. .) es un problema. Esto puede provocar que algunos formatos no se abran mientras que otros se abren bien.

// Esto también borrará el búfer, evitando que se envíen líneas vacías al archivo de descarga

Response.reset();

// }} }

prueba {

java.io.File f = new java.io.filePath

if (f.exists() amp; amp; f. canRead()) {

java.io.File f = new java.io.canRead()) {

// Estamos comprobando si el archivo ya está en el caché del cliente Última versión, esto le indicará

// al cliente que no vuelva a descargar el archivo, pero no importa si el cliente no quiere verificar

/ / El cliente no necesita volver a descargar. p>

if ( checkFor304( request, f ) )

{

// El cliente ya tiene la última versión, devuelve 304

respuesta.sendError( HttpServletResponse.SC_NOT_MODIFIED );

return

// Se informa al cliente que la última versión del archivo ya está en la memoria caché. p>

return;

}

// Lee el tipo de contenido del archivo desde la configuración del servidor y configura el tipo de contenido.

p>

// aplicación/x-download, porque a veces nuestros clientes pueden querer abrir el archivo directamente en el navegador,

// y luego usar el archivo que no está disponible en el navegador.

//FireFox puede abrir archivos directamente en el navegador,

// Por ejemplo, el informe de Excel y la aplicación/x-download no es un tipo MIME estándar,

// FireFox no parece reconocer este tipo MIME.

String mimetype = null

mimetype = application.getMimeType( filePath

if ( mimetype == null )

{

mimetype = " aplicación/octeto-stream; charset= ISO8859-1 " ;

}

respuesta.setContentType( target="_blank")setContentType( mimetype );

// IE solo puede descargar archivos HTML con encabezados reconocibles por IE; de lo contrario, IE debe abrir el archivo.

String ua = request.getHeader( " User-Agent " ); // Obtener el tipo de punto final

if (ua == null ) ua = " User-Agent: Mozilla/ 4.0 (compatible; MSIE 6.0;) " ;

booleano isIE = ua.toLowerCase().indexOf( " msie " ) ! = - 1; // Es IE

if (isIE amp; ! isInline) {

mimetype = " aplicación/x-msdownload "

}

// A continuación, intentaremos que el cliente muestre el nombre de archivo correcto al guardar el archivo convirtiendo el nombre del archivo a la codificación ISO8859-1

// String downCase (.indexOf ( " msie " ) ! p>

String downFileName = new String(f.getName().getBytes(), " ISO8859-1 " );

String inlineType = isInline ? " inline " : " adjunto "; // Si el archivo adjunto está en línea

// O use este encabezado, pero es posible que Firefox no admita este encabezado

// setContentType(" application/x-download");

respuesta.setHeader ( " Content-Disposition " , inlineType " ; filename=\ ""

downFileName "\ "" );

Response.setContentLength(( int ) f.length()); // Establece el tamaño del contenido descargado

byte [] buffer = new byte [ 4096 ]; p>

Salida BufferedOutputStream = nulo

Entrada BufferedInputStream = nulo

//

prueba {

salida = nuevo BufferedOutputStream(response.getOutputStream());

entrada = nuevo BufferedInputStream( nuevo FileInputStream(f));

int n = ( - 1 );

while ((n = input.read(búfer, 0, 4096)) gt; - 1) {

salida.write(búfer, 0, n);

}

respuesta.flushBuffer();

}

catch (Exception e) {

} // El usuario podrá cancelar el descargar . // Es posible que el usuario haya cancelado la descarga

finalmente {

if (input ! = null ) input.close();

if (output ! = nulo ) salida.close();

}

}

retorno

} captura (Excepción ex) {

// ex.printStackTrace();

}

// Si falla la descarga del archivo, informe al usuario que el archivo se ha descargado. Si falla, dígale al usuario que el archivo no existe

Response.sendError(404);

gt;

// Si la descarga del el archivo falla, dígale al usuario que el archivo no existe

respuesta.sendError(404);

gt;

Descargado.