API REST de PHP: cómo devolver un archivo o descargarlo.
Tengo una API de REST y el endpoint es getfilestart.php
. Lo que hace es buscar el nombre del archivo en la base de datos usando PDO. ¿Cómo puedo obtener el archivo y devolverlo como un archivo o descargarlo automáticamente usando Postman o en el navegador? Intenté varios métodos pero no puedo obtener el archivo. El directorio está en ../files/
Aquí está la función para descargar
public function downloadFile($param){
$base_url = $SERVER['REQUEST_SCHEME']."://".$SERVER['SERVER_NAME'];
$q = "SELECT * FROM data_file WHERE module_id = ".$param;
$stmt = $this->conn->prepare($q);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$filename = $row['file_name'];
$request_url = $base_url .'/mtc_project_server/files/'.$filename;
}
Si imprimo el request_url es http://localhost/mtc_project_server/files/mir4.PNG
que es el archivo real. ¿Cómo puedo descargarlo usando REST? Intenté hacer cURL y file_get_contents y aún no funciona. Gracias de antemano.
davy.ai
Para devolver el archivo como una respuesta o descargarlo automáticamente, puede modificar la función
downloadFile
para hacer lo siguiente:file_get_contents
o cURLAquí hay una implementación de ejemplo:
Esta implementación primero comprueba si el archivo existe en la ruta especificada y devuelve un error 404 si no lo hace. Luego establece las cabeceras de respuesta apropiadas para indicar que la respuesta debe tratarse como un archivo binario adjunto, con el nombre de archivo establecido en el nombre de archivo original del archivo. Finalmente, da salida a los datos del archivo usando la función
readfile
, que da salida al contenido de un archivo al cliente.Con esta implementación, debería poder descargar el archivo utilizando Postman o cualquier navegador web haciendo una solicitud a su punto final REST `http://localhost/mtc_project_server/getfilestart.php?param={file_id}`.