Fichero no se crea del lado del Servidor

Hola

Estoy consumiento un servicio que me trae como resultado un fichero que quiero almacenar en el lado del servidor. Tengo un proceso que ejecuto en 3ºPlano que es la petición HTTP al endpoint y la recogida del fichero que me devuelve como respuesta un arraybuffer. Cuando en la respuesta procedo a crear un VFile para guardar el contenido, este nunca se llega a crear en el servidor. Lo hago de este modo:

var fi = new VFile("/root/Velneo/data/app/archivo.txt");
 if (fi.open(VFile.OpenModeWriteOnly | VFile.OpenModeTruncate))
{
  fi.write(xhr.response);
  fi.close();
}

Es un proceso JavaScript, si lo ejecuto desde el lado del cliente y lo guardo en una ruta Windows, si que se crea perfecto.

Lo curioso es que si yo por ejemplo ejecuto la instrucción Fichero:Abrir para crear un fichero desde un proceso Velneo en 3º Plano, si que lo hace en el servidor en la ruta correspondiente.

He probado distintas maneras, Utilizar un proceso velneo directamente ejecutando el Script y recogiendo su valor en una variable para crear el fichero y escribir su contenido con Fichero:Grabar Linea, pero el contenido llega vacio logicamente al ser un arraybuffer.

¿Alguien sabe por que es?

Gracias de antemano.

Buenos días,

Casi seguro que habrás comprobado estas cosas, pero por si acaso:

1º ¿Aparece algún mensaje en el vAdmin?

2º ¿Has incluido la instrucción de importClass( “VFile” ); antes de la llamada?

importClass( "VFile" );

var fi = new VFile("/root/Velneo/data/app/archivo.txt");

if (fi.open(VFile.OpenModeWriteOnly | VFile.OpenModeTruncate))
{
  fi.write(xhr.response);
  fi.close();
}

Un saludo

Pedro Porlán

Hola, Gracias por tu respuesta Pedro

Comprobé que hubiera importado la clase y también que no hubieran errores en el vAdmin, pero nada.

Intenté tambien con la clase VTextFile, pero tampoco funcionaba, unicamente guardaba el fichero ejecutado desde un cliente, no se que puede estar pasando si nada me da error… Próbe a pasar la variable con :confused: theRoot.setVar("FILE_CONTENT",xhr.response);

Pero claro, al ser un Object, se asigna vacio, no se que más intentar…

Segun la documentación… hay una funcion de la clase VByteArray que es setArrayBuffer, en la que te devuelve el contenido, siempre y cuando se ejecute como comando Ejecutar FileScript pero no se de donde se han sacado eso, por que no me la reconoce. Sería por rellenar la documentación

Buenas

Efectivamente no es posible crear un fichero del lado del servidor, mediante JavaScript, excepto si es un servidor propio cloud de Velneo, en el caso de que tengas un servidor propio, es decir, algo estilo VPS ajeno, no te va a dejar crear ficheros por un tema de permisos…

Y si te refieres a la función de esta parte de la documentación https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vbytearray#void-setarraybuffer-arraybuffer desiste, por que esto no funciona, lo probé por activa y pasiva, pero es lo que llamo yo una función relleno, no existe, la documentación respecto a su “Javascript Custom” deja bastante que desear.

Si la api es tuya, en vez de devolver el contenido del fichero, puedes generar una url y que te la devuelva, para asi descargar el fichero con Get Fichero URL