[SOLUCIONADO] Servir archivos

Saludos,
estoy necesitando servir archivos a los usuarios, archivos que tengo listados en una tabla y que solo ellos podrian verlos. ¿Existe algún método en toba para esto? y si no, ¿De que manera podría hacerlo?.
Estoy usando Toba 1.1.0.
Desde ya muchas gracias.

Te dejo un explicación vaga, si ves que algo puntual no se entiende o asume algo incorrecto lo vemos en profundidad.

Suponiendo que tenés una operación que lista los archivos según el usuario actual (usando por ejemplo toba::usuario()->get_id()) una formal de descargar dicho archivo es hacer otra operación en cuyas propiedades tenga “Solicitud PHP Plano” (este nombre puede variar en la 1.1, no la tengo a mano) y especificar un archivo php por ejemplo ‘descarga.php’

En la operación que lista los archivos, hay que hacer un vinculo a esta nuevo operación y por ejemplo enviarle por GET el id del archivo a bajar.

El vinculo quedaría así


$parametros = array('id_archivo' => <id_archivo);
toba::vinculador()->get_url(null, <id_operacion_descarga>, $parametros);

El receptor de este vinculo debería escuchar este parametro y, validacion mediante de que puede efectivamente verlo, enviarlo al cliente:


$id_archivo = toba::memoria()->get_parametro('id_archivo');
//TODO: Validar que $id_archivo existe y que el usuario actual tenga permisos de bajarlo

//Suponiendo que sea un pdf enviar los headers correspondientes
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="archivo.pdf"');
echo file_get_contents($path_archivo);

Si el archivo fisicamente esta en la base de datos se puede consultar con un select común, php retorna un file pointer al archivo y con fread podés ir enviandolo al cliente.

Exelente, muchas gracias.
Si a alguien le interesa, el header que utilicé (Sacados de la doc de php) sirve para forzar la descarga:

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}