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!
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!
Hola Cristina
Que version de mirth y version de java estas usando?
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.
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!
Hola otra vez, probado y funciona a la perfección.
Mil gracias!
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.
