【问题标题】:How to Download file from PHP using call API?如何使用调用 API 从 PHP 下载文件?
【发布时间】:2019-06-22 11:51:21
【问题描述】:

我需要从 Symfony 的目录中下载一个文件。问题是,当我通过身份验证时,我需要下载这个文件。

为此,我创建了一个带有 ID(id 文件)的端点(GET 方法),并且我正在从一个 React 应用程序进行调用,并在 Headers 中传递一个授权承载。

问题是,文件不是直接下载的,但是如果我从 Chrome 进入 DevTools,我看到响应中存在文件,但没有下载。

这是 PHP 代码:

$file = new File($fullPath);

return $this->file($file);

如何下​​载文件?

【问题讨论】:

  • 这听起来有点愚蠢,但我在这里的第一个答案中解决了它:stackoverflow.com/questions/29452031/… 这是关于 Angular,但由于它是一个普遍问题,所以方法保持不变。由于授权无法直接链接它,因此您将文件提供给您的 js ajax 处理程序,并为其动态创建一个不可见的链接并以编程方式单击它,然后删除链接元素。听起来像一个愚蠢的解决方法,但这是要走的路。
  • 完美,具有魅力:D 谢谢!

标签: reactjs api symfony


【解决方案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 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 2011-11-16
    • 2013-02-26
    • 2013-07-25
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多