失败,zip 文件通过 axios 从 vuejs 下载

Posted

技术标签:

【中文标题】失败,zip 文件通过 axios 从 vuejs 下载【英文标题】:failed, zip file Download via axios from vuejs 【发布时间】:2020-12-04 04:07:12 【问题描述】:

我在 Vue.js 中下载 .zip 文件时遇到问题。这是我的代码。

if (response) 
                    let fileName = response.headers["x-suggested-filename"]
                    var fileUrl = window.URL.createObjectURL(new Blob([response.data], type: "application/zip"));
                    var fileLink = document.createElement("a");
                    fileLink.href = fileUrl;
                    fileLink.setAttribute("download", fileName);
                    document.body.appendChild(fileLink);
                    fileLink.click();
                 else 
                    this.$notify.error(
                        title:    "Request failed",
                        message:  "No response received. ",
                        duration: 0,
                    );
                

这是我的回复标题

我下载了文件,但它不起作用。

但是链接可以工作,这意味着,后端站点没有问题。 我该如何解决这个错误?

这是我的服务器代码。

public function export(array $params)

    if (!$this->load($params, '') || !$this->validate()) 
        throw new BadRequestHttpException();
    

    $exporter = new ProfileExporter($this->format);
    $zipFile = new ZipFile();

    $exporter->exportToZipFile($zipFile, $this->profileId, $params);
    $fileName = 'df-profile-data-export-' . \Yii::$app->formatter->asDate('now', 'yyyy-MM-dd') . '.' .
        $this->getFileExtension();

    $stream = fopen('php://memory', 'w+');
    $zipFile->writeToStream($stream);
    \Yii::$app->response->headers->add('X-Suggested-Filename', $fileName);

    \Yii::$app->response->sendStreamAsFile($stream, $fileName, [
        'mimeType' => 'application/zip',
    ]);

【问题讨论】:

能否将您的代码添加为文本?这使得使用更正的版本更容易阅读和回答 当然。已添加 那是..仍然是图像。现在,即使有了服务器代码的第二张图片。 删除图片并将代码粘贴为文本 好的。我做。 :) 【参考方案1】:

要通过 axios 下载文件,您应该在 axios 标头中设置 responseType

responseType:'blob'

【讨论】:

以上是关于失败,zip 文件通过 axios 从 vuejs 下载的主要内容,如果未能解决你的问题,请参考以下文章

axios 在 NS VUEJS APP 中的调用没有失败

从 Vuejs 到 Django REST 框架的 Axios POST 请求

如何将变量从 axios 获取请求传递给 vuejs 中的子组件?

如何在 vuejs 中使用 axios 从数组中发布多个请求?

Vuejs Axios POST 请求从 Laravel 后端获取 HTTP422 错误

使用 Axios 将整个 HTML 项目加载到 VueJS 组件中