Escribir en carpeta...
 
Avisos
Vaciar todo

Escribir en carpeta de red

16 Mensajes
2 Usuarios
0 Me gustas
523 Vistas
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

Buenos días, estoy trabajando con la versión 3.8.1, me gustaría escribir en una carpeta en red sin tener que conectar una unidad de red. A esa carpeta en red puedo entrar y editar sin necesidad de loggearme por permisos que tiene ya el usuario con el que inicio sesión, pero cuando lo intento hacer con mirth me dice que no tiene permisos. Anteriormente con antiguas versiones no se podía y había que conectar a unidad de red para poder escribir en la misma. ¿En esta versión sigue necesario hacer eso? El usuario con el que mirth trabaja, en teoría es el local, pero ese local si a mi me da permisos para editar en esa carpeta, ¿no debería ser suficiente con eso? ¿o ese usuario local no tiene exactamente los mismos permisos?

Saludos y gracias de antemano.


   
Cita
(@jluengo)
Active Member
Registrado: hace 5 años
Mensajes: 15
 

Hola @CrisSorli,

Supongo que te refieres a las unidades de red de Microsoft Windows (SMB/CIFS).

Si es así, me temo que el método que usa Mirth Connect para establecer dichas conexiones es a través de una biblioteca multiplataforma (jCIFS) que nada tiene que ver con la implementación que el sistema operativo ofrece, y por tanto no puede obtener las credenciales de inicio de sesión (y por motivos de diseño probablemente nunca lo hará).

 

Sin embargo, aún puedes probar a escribir rutas UNC para acceder a esos archivos si no es la alternativa que estás utilizando. Aquí tienes más información:

https://stackoverflow.com/questions/17727828/java-jcifs-accessing-an-smb-location-using-running-user-credentials

Espero haberte ayudado, un saludo.

 


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

De acuerdo.

Una pregunta... en el link que me sugerís, recomienda el uso con

FileInputStream s = new FileInputStream("\\\\server\\share\\file.txt");

¿Para usar ese tipo de variable tengo que importar algún paquete? He intentado usarlo pero me ha dado error.

Muchas gracias por tu respuesta!


   
ResponderCita
(@jluengo)
Active Member
Registrado: hace 5 años
Mensajes: 15
 

Efectivamente, en un código JavaScript con Mirth connect no te funcionará así como está, tendrías que especificar el nombre del paquete:

var s = new java.io.FileInputStream.FileInputStream("\\\\server\\share\\file.txt");

Igualmente, prueba a usar tu ruta UNC en el propio conector de Mirth, quizá funcione.

 


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

@jluengo Buenas!

Mi problema inicial era que cuando escribo la ruta que tiene formato

\\server\share

file.txt

en el propio conector de Mirth por un lado hago prueba con Test Write y sí que se puede, me pone Successfully connected, pero al ejecutar el canal me da error

ERROR MESSAGE: Error writing file

mi ruta con formato \\server\share  y  (Acceso denegado)

Entonces he pensado que sí que ve la ruta pero el usuario Mirth no tiene los credenciales para escribir. 

Si lo hago por javascript como me comentas en tus mensajes, las credenciales para poder escribir en esa carpeta dónde las pondría?

Saludos y gracias!


   
ResponderCita
(@jluengo)
Active Member
Registrado: hace 5 años
Mensajes: 15
 

@crissorli Buenos días,

No se pueden introducir credenciales de esta forma, puesto que solo se está pidiendo al sistema operativo la ruta de una carpeta.

Sin embargo, se supone que no las necesitas, si es que puedes acceder a esa ruta desde el explorador de archivos de Windows con tu usuario. Comprueba que la ruta UNC de tu carpeta de red sea la misma que estés introduciendo en Mirth y que te funcione si la escribes en la barra de direcciones del explorador de archivos de Windows.

Aquí tienes una forma de obtener una dirección UNC de una carpeta compartida que tengas disponible en Windows: https://docs.microsoft.com/en-us/answers/questions/474478/find-the-unc-path-for-a-file-on-my-computer.html

Un saludo.


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

Hola Javier, 

la ruta realmente es \\ip\nombrecarpetacompartida, la ruta UNC que comentas sería esa, no?, estoy con usuario administrador y si abro esa carpeta con esa ruta en el explorador puedo crear un txt, pero si lo hago desde Mirth me dice acceso denegado una vez ejecuto el canal, hay algo que no es igual en los permisos de mi usuario administrador y el usuario interno con el que trabaja Mirth. 

Saludos y gracias por tus respuestas!


   
ResponderCita
(@jluengo)
Active Member
Registrado: hace 5 años
Mensajes: 15
 

Sí, la ruta UNC sería esa. Le he echado un vistazo al código fuente de Mirth Connect y parece que internamente reemplace las contrabarras de las rutas (\) por barras (/). En general no debería ser un problema, pues ambas deberían funcionar en Java. Sin embargo, para este caso tan concreto es posible que deban mantenerse iguales y que por eso no funcione.

Siempre te queda la opción manual, y es manipular los archivos usando Java desde algún conector JavaScript en el canal. Con suerte así funcione.

var file = new java.io.File("\\\\ip\\nombrecarpetacompartida\\file.txt");
file.createNewFile();

 Ya me cuentas si te funciona.

 

Un saludo.


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

Buenas, llevo media mañana peleándome pero hay algo que no me llega a ir, estoy con un ejemplo súper simple de crear un fichero y escribir una línea, no estoy siendo capaz de conseguirlo.. 

var fich_origen = "C:\\prueba\\prueba.txt";
var file = new java.io.File(fich_origen);
//file.createNewFile();
var fout = new java.io.FileOutputStream(file);

fout.write("primera linea");
fout.close();

prueba.txt no existe, la idea es que se cree, se escriba contenido y ya está.

Ahora mismo me da el error Cannot convert primera linea to java.lang.Integer,  entiendo que tiene que ver con que estoy pasándole una cadena en lugar de un entero?¿ cómo escribo entonces una cadena?

 


   
ResponderCita
(@jluengo)
Active Member
Registrado: hace 5 años
Mensajes: 15
 

Buenas, el método write de FileOutputStream acepta como parámetros o bien un entero que representa un único carácter ASCII o bien una cadena de bytes.

Puedes convertir un String Java (que no JavaScript)  a un array de bytes de la siguiente manera: 

var java_str = new java.lang.String("primera linea");
fout.write(java_str.getBytes());

El método getBytes() convertirá la cadena de texto Java a una secuencia de bytes utilizando la codificación por defecto del sistema (hay que tenerlo en cuenta para caracteres especiales no ASCII).


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

Hola! Al final buscando he topado con FileUtil que parece ser que viene implícita en Mirth y así me ha funcionado.

var fich_origen = "C:\\prueba\\prueba.txt";
var file = new java.io.File(fich_origen);
file.createNewFile();
FileUtil.write(file,true,"Hola que tal");

Voy a probar completando con la forma que me has dicho y así tengo las dos opciones.

Muchas gracias!


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

Ahora me faltaría probar con una carpeta en red, que al final era mi problema inicial 😓 


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

Me da exactamente el mismo error... Acceso denegado. Sigo en el mismo punto pese a usar javascript.

Esa ruta que pruebo acabo de abrir por explorador, crear un fichero, modificarlo y borrarlo. Vuelvo entonces a pensar en que tiene que ver algo con los permisos...


   
ResponderCita
(@jluengo)
Active Member
Registrado: hace 5 años
Mensajes: 15
 

Entonces quizá sea un problema de permisos. Puedes intentar localizar en el administrador de tareas el proceso del servidor, en la pestaña detalles y ver qué usuario es el que lo ejecuta. Probablemente el proceso se llame "mcserver" o algo así.

Por otro lado, en el caso de no reconocer bien la ruta, estoy viendo que hay también otras formas de escribir direcciones UNC en Java. 

Puedes probar a utilizar esta ruta en su lugar:

file:////ip/nombrecarpetacompartida

También puedes probar así:

\\ip/nombrecarpetacompartida

Que escapado en un String sería:

"\\\\ip/nombrecarpetacompartida"

https://stackoverflow.com/questions/41926148/java-how-to-access-unc-location

La primera alternativa puedes incluso probarla en el File Writer de Mirth, ya que no utiliza contrabarras.

 


   
ResponderCita
(@crissorli)
Active Member
Registrado: hace 1 año
Mensajes: 9
Topic starter  

Hola!

He hecho la prueba usando como smb y ha funcionado.

Muchísimas gracias por tu ayuda!!


   
ResponderCita
Página 1 / 2
Compartir:
Forum