Pregunta
· 30 jun, 2021

¿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

Comentarios (1)2
Inicie sesión o regístrese para continuar

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.