files example spring grails download http-headers attachment

spring - example - Descarga del archivo Grails



spring rest controller file upload (1)

Estoy intentando crear un sitio que permita a los usuarios subir cualquier tipo de archivo que les guste. Implementé bien esta característica y el archivo se guarda en el servidor. Más tarde pueden descargar el archivo para verlo, pero estoy teniendo problemas para que funcione.

He usado algunos ejemplos que puedo encontrar pero todos tienden a usar archivos de texto como ejemplos. Mi problema es que el pdf y muchos otros tipos de archivos no se están descargando correctamente. Parecen descargar bien, pero ninguno de los archivos se abrirá correctamente. Comparando los archivos, parece que la mayoría del contenido de los archivos es correcto, pero ciertas partes no lo son.

Aquí está mi código groovy:

def file = new File(params.fileDir) response.setContentType("application/octet-stream") response.setHeader("Content-disposition", "filename=${file.getName()}") response.outputStream << file.text return

Este código se guarda dentro de un controlador al que se llama mediante un enlace de descarga. He intentado jugar con diferentes contentTypes, pero no sé cuál podría usar para cualquier tipo, ¿hay alguno? Todo lo que intento no resuelve el problema.

Gracias por tu ayuda.


El problema es que usted lee el contenido del archivo en una cadena usando "file.text". El contenido del archivo se convierte con la codificación de caracteres del sistema, incluso si el contenido es binario, no el texto (por ejemplo, los archivos PDF son binarios) y se envía al cliente utilizando la codificación de respuesta y modificando así el contenido binario. Deberías usar un enfoque diferente como este:

def file = new File(params.fileDir) response.setContentType("application/octet-stream") response.setHeader("Content-disposition", "attachment;filename=${file.getName()}") response.outputStream << file.newInputStream() // Performing a binary stream copy