Tengo una API de descanso y el punto final es getfilestart.php . Lo que hace es que busca 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 cartero 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 descargo 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 por adelantado
Desde la URL de su archivo de descarga $request_url .
Este es el código fuente de descarga forzada para el lado del servidor.
// https://stackoverflow.com/questions/7263923/how-to-force-file-download-with-php header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"" . basename($request_url) . ".jpg\""); readfile($request_url); exit();// end process to prevent any problems. Este es el código fuente para la descarga que funciona en el lado del cliente.
$url = 'https://my-domain.tld/rest-api/path.php';// change this to your REST API URL. // https://stackoverflow.com/questions/6409462/downloading-a-large-file-using-curl $fileext = pathinfo($url, PATHINFO_EXTENSION); echo $fileext; set_time_limit(0); // For save data to temp file. $fp = fopen (__DIR__ . '/localfile.tmp', 'w+'); //Here is the file we are downloading, replace spaces with %20 $ch = curl_init(str_replace(" ","%20",$url)); curl_setopt($ch, CURLOPT_TIMEOUT, 50); // write curl response to file curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); // get curl response $response = curl_exec($ch); $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size); $body = substr($response, $header_size); fwrite($fp, $body); curl_close($ch); fclose($fp); // rename temp file. preg_match('/filename=[\'"]?([\w\d\.\-_]+)[\'"]?/i', $header, $matches); var_dump($matches); if (isset($matches[1]) && !is_file(__DIR__ . '/' . $matches[1])) { // if target rename file is not exists. rename(__DIR__ . '/localfile.tmp', __DIR__ . '/' . $matches[1]); } else { // for debug echo 'something wrong!<br>'; var_dump($matches); echo '<br>'; echo 'File was downloaded into ' . __DIR__ . '/localfile.tmp'; exit(); }