【发布时间】:2019-12-12 07:21:09
【问题描述】:
我需要使用 Laravel 从 api 响应源下载文件。
一个示例 api - (http://webservice.test.de/merchants/orders/getOrderInvoice?key=1234567894&format=json&order_no=444555666.
调用此 API 后,我将收到 JSON 响应。 JSON 响应如下。
{
"result": {
"success": "1",
"invoice": {
"src": "webservice.test.de/docs/invoice?secure_key=333444555666777888&key= 1234567894",
"filename": "Invoice_12345-234566.pdf"
}
}
}
当我在浏览器上运行这个 src url (['result']['invoice']['src']) 时,将下载一个 pdf 文件 (Invoice_12345-234566.pdf)。如何使用 Laravel 从src 下载文件?
Laravel 代码
public function curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
$jsonDecodedResults = json_decode($result, true);
return $jsonDecodedResults;
}
$getOrderInvoice = 'http://webservice.test.de/merchants/orders/getOrderInvoice?key=1234567894&format=json&order_no=444555666';
$jsonDecodedResults = $this->curl($getOrderInvoice);
if( $jsonDecodedResults['result']['success'] === '1' ) {
$fileSource = $jsonDecodedResults['result']['invoice']['src'];
$fileName = $jsonDecodedResults['result']['invoice']['filename'];
$headers = ['Content-Type: application/pdf'];
return response()->download($fileSource, $fileName, $headers);
}
错误
exception: "Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException"
任何帮助将不胜感激。
【问题讨论】:
-
您提供的示例网址无效,如果它只是一个虚拟的那么我很糟糕,否则您不需要运行CURL,您可以通过file_get_contens()函数获取文件。然后将文件保存在本地并将其作为下载响应。
-
@BlackXero。给定的网址是虚拟的。
-
您是否使用诸如 TCPDF 之类的包创建文件?如果是这样,我有一个建议,例如,将文件保存到服务器目录并从保存的目录下载(对于从目录路径下载,有几种方法可以使用 php)谢谢 :)
-
@Ajith。不使用任何软件包。文件源是从外部 api 获取的。
标签: php laravel laravel-5 laravel-5.8