Forum

Crear un zip [Soluc...
 
Notifications
Clear all

El foro de caduceus.es ha sido migrado a meditecs.com. Descubre más sobre el cambio en este post.

🇬🇧 English speaker? Go to Meditecs forums in English!

[Solved] Crear un zip [Solucionado]

6 Posts
3 Users
0 Reactions
2,477 Views
(@cristina_sorli_clemente)
Eminent Member
Joined: 11 years ago
Posts: 17
Topic starter   [#22]

Buenas!

Estoy intentando crear un zip de un fichero... el código que tengo es el siguente

importPackage(java.util.zip);
 var fichero = sourceMap.get('originalFilename');
 var contentstring = FileUtil.read('C:/pdftofile/' + fichero);

 var bkpDIR = "C:\pdftofile\";
 var outputFile = new java.io.File(bkpDIR + fichero);
 var outf = new java.io.FileOutputStream(outputFile);
 var out = new java.util.zip.ZipOutputStream(new java.io.BufferedOutputStream(outf));

 out.write(bkpDIR + 'filezip', false, contentstring);
 out.close();

el error que me da es Can't find method java.util.zip.DeflaterOutputStream.write(org.mozilla.javascript.ConsString,boolean,java.lang.String)

He buscado y esa parte también esta incluida en java.util.zip. Alguna idea? De todas formas no se si este código es la mejor fórmula para crear un zip... Si alguien sugiere una forma mejor..?

Gracias!



   
(@caseystoner)
Eminent Member
Joined: 13 years ago
Posts: 31
 

Hola Cristina

Que version de mirth y version de java estas usando?

 

 



   
(@fjcarrasco)
Member Admin
Joined: 13 years ago
Posts: 39
 

Hola, Cristina:

Puedes echarle un vistazo a la documentación de Oracle en la que se espeficica cómo hacerlo a partir de código Java.

Te recomiendo que encapsules tu código dentro de una función debidamente parametrizada en los Code Templates de Mirth Connect, por si tuvieras que usarla más veces.

Un ejemplo de función parametrizada a partir de la documentación de Oracle podría ser el siguiente:

// Comprime un fichero en formato ZIP
function createZipFile(path_in, filename_in, path_out, filename_out, tam_buffer) {

  // Acceso al contenido del fichero de entrada
  var fin = new java.io.File(path_in + filename_in);
  var fis = new java.io.FileInputStream(fin);
  var bis = new java.io.BufferedInputStream(fis, tam_buffer);

  // Creación del fichero ZIP de salida
  var fout = new java.io.File(path_out + filename_out);
  var fos = new java.io.FileOutputStream(fout);
  var bos = new java.io.BufferedOutputStream(fos);
  var zout = new java.util.zip.ZipOutputStream(bos);

  // Creación e inserción de la nueva entrada en el fichero ZIP
  var entry = new java.util.zip.ZipEntry(filename_in);
  zout.putNextEntry(entry);

  // Escritura del contenido en la entrada del fichero ZIP
  var count;
  var datastring = new java.lang.String("");
  for (var i = 0; i < tam_buffer; i++)
    datastring = new java.lang.String(datastring + "0");
  var databytes = datastring.getBytes();
  while((count = bis.read(databytes, 0, tam_buffer)) != -1)
    zout.write(databytes, 0, count);

  // Cierre de la entrada del fichero ZIP
  zout.closeEntry();

  // Cierre del fichero ZIP de salida
  zout.close();
}

Posteriormente, en un transformador de tu conector fuente de tipo File Reader, puedes utilizar la función anterior de la siguiente forma:

createZipFile(
"C:\tmp\informaticasana\foros\", // path del fichero de entrada
sourceMap.get('originalFilename'), // nombre del fichero de entrada
"C:\tmp\informaticasana\foros\", // path del fichero ZIP de salida
"zipfromfile.zip", // nombre del fichero ZIP de salida
2048 // tamaño del buffer para realizar la copia del fichero
);

Por otro lado, si quieres mejorar el rendimiento de tu transformador, puedes probar con varios tamaños de buffer para ver cuál genera tus ficheros de forma más rápida, lo que dependerá de los tamaños de fichero con los que estés trabajando. El tamaño de buffer 2048 suele funcionar bien. En cualquier caso, puedes comparar las ejecuciones con el siguiente código:

var start = new Date().getTime();
createZipFile(...);
var end = new Date().getTime();
var time = end - start;
logger.debug('Execution time: ' + time);

Espero haberte ayudado. Ya nos cuentas cómo te ha ido.

Un saludo.



   
(@cristina_sorli_clemente)
Eminent Member
Joined: 11 years ago
Posts: 17
Topic starter  

Buenos días chicos,

primero de todo gracias por vuestras respuestas.

Pablo, la versión de mirth que uso es la 3.2.1 y la versión java es la 8.

Francisco voy a probar si me funciona.

Un saludo!

 



   
(@cristina_sorli_clemente)
Eminent Member
Joined: 11 years ago
Posts: 17
Topic starter  

Hola otra vez, probado y funciona a la perfección.

Mil gracias!



   
(@fjcarrasco)
Member Admin
Joined: 13 years ago
Posts: 39
 

De nada, Cristina, para eso estamos, para ayudarnos entre nosotros. 😉

Por cierto, te recomiendo que actualices a la última versión de Mirth Connect, ya que incorpora nuevas características muy interesantes.

Un saludo.



   
Share:
Scroll to Top