如何使用调用 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 文件?

如何使用 jQuery Ajax 调用从 ASP.NET Web Api 下载 CSV 文件

PHP rest api如何返回文件或下载

支付宝接口php 如何调用

如何使用 API 下载推文文本?

使用 React 和 Axios 从 Express API 下载文件