¿Cómo borrar el fichero ".stream" generado a partir de un PDF?
Hola, buenos días.
Necesitaríamos orientación, guía o apoyo de ustedes para realizar lo siguiente:
Nuestro objetivo es: lograr que el fichero ".stream" NO se guarde, en la carpeta: /opt/ensemble/[Entorno]/stream
Tenemos un Servicio REST, un Proceso y una Operacion REST
Desde la Operacion al Proceso existe un Mensaje Response: Mensajes.Response.HistoriaClinica.GetInformeResponse
con un pdf definido como:
Property pdf As %GlobalCharacterStream;
Además, desde el Proceso al Servicio nuestro Mensaje Response es: Mensajes.Response.Informes.v02r00.obtenerCartillaVerdeDigitalResponse
donde el pdf está definido así:
Property pdf As %GlobalCharacterStream;
Ahora mismo se está guardando un fichero ".stream" en la carpeta: /opt/ensemble/[Entorno]/stream
Nuestro objetivo es: lograr que el fichero ".stream" NO se guarde, para evitar ocupar espacio cada vez que obtenemos un pdf 💭💭
Lo que hemos desarrollado es:
1º Borrar en el Proceso, el PDF que nos envía la Operacion mediante un <code>:
do context.responseGetInforme.respuesta.pdf.Clear()
$$$LOGWARNING("Despues de borrar en el BP: context.responseGetInforme.respuesta.pdf.Clear()")
Esto nos permite ver en la traza el response sin el pdf
2º Borramos en el Servicio, el PDF que nos envía el Proceso mediante:
set pOutput = ##class(%GlobalBinaryStream).%New()
while(msg.AtEnd=0){
do pOutput.Write(msg.Read())
}
do msg.Clear()
Quit $$$OK
do pOutput.Clear()
$$$LOGWARNING("Despues de borrar en el Servicio: pOutput.Clear()")
Como ustedes verán, tenemos "2 variables con pdfs"
1º msg la cual se asignó mediante:
Do msg.Write($SYSTEM.Encryption.Base64Decode(response.datos.pdf))
La cual estamos "borrando" después de asignarla a pOutput
2º pOutput es la variable que el OnProcessInput() del servicio REST devuelve al POSTMAN
¿Donde borraríamos este pOutput?
Es decir, actualmente en el POSTMAN vemos el contenido del pdf:
Y el fichero ".stream" se genera:
¿Dónde y cómo lograríamos borrar la variable pOutput de tal forma que NO se genere ese ".stream"?
Hemos leído:
https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=EG...
https://community.intersystems.com/post/delete-records-streamfilebinary-...
https://community.intersystems.com/post/stream-files-stored-server-when-...
Además hemos probado a usar el tipo de datos: %Stream.TmpBinary con el siguiente código en el servicio rest:
// ➡️ Probamos el 30 06 21 a usar el tipo de dato %Stream.TmpBinary
// para que NO se guarde en /opt/ensemble/ESBHCDSNS/stream el fichero ".stream"
set pOutput = ##class(%Stream.TmpBinary).%New()
while(msg.AtEnd=0){
do pOutput.Write(msg.Read())
}
do msg.Clear()
Quit $$$OK
Ya que en la documentación: https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic....
pone: "Temporary character stream. Any calls to save this just return without doing any work. "
Sin embargo sigue generándose el .stream
¿Cómo implementarían ustedes el borrar el .stream generado cuando obtenemos el pdf‽
▶️ Gracias por su tiempo al leer esta pregunta, y agradecemos cualquier respuesta con documentación, sugerencias, ejemplos o recomendaciones. 💭
Un saludo
Hola @Yone Moreno,
Al final ha coincide que hemos comentado este tema online :)
Hemos descubierto finalmente que los ficheros Streams se estaban generando por otra clase de mensajes que utilizaban %Stream.FileBinary.
Recuerda que las propiedades %Stream.Global* no almacenan en fichero externos sino en la base de datos.
En cualquier caso, sean %Stream.File* o %Stream.Global* al hacer un Clear() podemos borrarlas sin problemas.