如何使用调用 API 从 PHP 下载文件?
Posted
技术标签:
【中文标题】如何使用调用 API 从 PHP 下载文件?【英文标题】:How to Download file from PHP using call API? 【发布时间】:2019-06-22 11:51:21 【问题描述】:我需要从 Symfony 的目录中下载一个文件。问题是,当我通过身份验证时,我需要下载这个文件。
为此,我创建了一个带有 ID(id 文件)的端点(GET 方法),并且我正在从一个 React 应用程序进行调用,并在 Headers 中传递一个授权承载。
问题是,文件不是直接下载的,但是如果我从 Chrome 进入 DevTools,我看到响应中存在文件,但没有下载。
这是 php 代码:
$file = new File($fullPath);
return $this->file($file);
如何下载文件?
【问题讨论】:
这听起来有点愚蠢,但我在这里的第一个答案中解决了它:***.com/questions/29452031/… 这是关于 Angular,但由于它是一个普遍问题,所以方法保持不变。由于授权无法直接链接它,因此您将文件提供给您的 js ajax 处理程序,并为其动态创建一个不可见的链接并以编程方式单击它,然后删除链接元素。听起来像一个愚蠢的解决方法,但这是要走的路。 完美,具有魅力:D 谢谢! 【参考方案1】:这是我的一个示例代码:
/**
* @param Product $product
* @param TranslatorInterface $translator
*
* @SWG\Response(
* response=200,
* description="Get allergensheet of a product",
* )
* @SWG\Tag(name="Product")
*
* @Route("/allergensheet/id", methods="GET")
*
* @Security(name="Bearer")
* @return Mixed
*/
public function downloadAllergenSheet(Product $product, TranslatorInterface $translator)
$allergens = $product->getAllergens();
if($allergens instanceof Allergens)
if($allergens->getHasSheet())
$fs = new Filesystem();
if($fs->exists($translator->trans($product->getArticleNr() . '_allergensheet')))
return new BinaryFileResponse($translator->trans($product->getArticleNr() . '_allergensheet'));
else
return new JsonResponse(false, Response::HTTP_NO_CONTENT);
else
return new JsonResponse(false, Response::HTTP_NO_CONTENT);
else
return new JsonResponse(false, Response::HTTP_NO_CONTENT);
也许这会有所帮助? 如果用于下载包含有关产品的一些信息的 PDF 文件。
【讨论】:
以上是关于如何使用调用 API 从 PHP 下载文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在前端使用 Angular 从 PHP Laravel API 下载 zip 文件?