相关疑难解决方法(0)

处理从ajax帖子下载的文件

我有一个javascript应用程序,它将ajax POST请求发送到某个URL.响应可能是JSON字符串,也可能是文件(作为附件).我可以在我的ajax调用中轻松检测Content-Type和Content-Disposition,但是一旦我检测到响应包含文件,我该如何让客户端下载它?我在这里读过很多类似的帖子,但没有一个提供我正在寻找的答案.

请,请不要发布答案,建议我不应该使用ajax或者我应该重定向浏览器,因为这都不是一个选项.使用纯HTML表单也不是一种选择.我需要的是向客户端显示下载对话框.可以这样做,怎么做?

编辑:

显然,这不可能做到,但有一个简单的解决方法,如接受的答案所示.对于今后遇到这个问题的人来说,我的解决方法如下:

__PRE__

所以基本上,只需生成一个HTML表单,其中包含与AJAX请求中使用的相同的参数并提交它.

javascript ajax jquery

373
推荐指数
10
解决办法
41万
查看次数

使用ajax请求下载文件

我想点击按钮时发送"ajax下载请求",所以我试着这样做:

JavaScript的:

var xhr = new XMLHttpRequest();
xhr.open("GET", "download.php");
xhr.send();
Run Code Online (Sandbox Code Playgroud)

的download.php:

<?
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= file.txt");
header("Content-Transfer-Encoding: binary");    
readfile("file.txt");
?>
Run Code Online (Sandbox Code Playgroud)

但是没有按预期工作,我该怎么办?先感谢您

javascript php ajax file download

87
推荐指数
5
解决办法
27万
查看次数

res.download()在我的情况下不起作用

我正在使用nodejs和expressjs框架从服务器下载文件'jsonFile.json'.

我使用以下代码

res.get('/download', function(req, res) {
         res.setHeader('Content-disposition', 'attachment; filename=jsonFile.json');
          res.setHeader('Content-Type', 'text/json');
          res.download(__dirname + 'jsonFile.json');
        }
      });
Run Code Online (Sandbox Code Playgroud)

但这导致对整个文件内容的响应.

我希望浏览器让我将文件保存在本地磁盘中.

如何将文件保存在本地磁盘中.???

javascript node.js express

9
推荐指数
2
解决办法
2万
查看次数

带有 Content-Disposition 的 HTTP 响应不会触发下载

我使用msw来模拟自动化 FE 测试的后端响应。

我想为用户创建的数据创建导出功能。我正在POST向所需的路线发出请求,并希望返回带有 .csv 的响应;.pdf ;.xls 文件应自动下载。

我一直在寻找合适的方法来做到这一点,并遇到了Content-Disposition响应标头。

遗憾的是,响应没有触发保存对话框,也没有开始下载,但我找不到错误。


编辑:经过几次对话和一些独特的情况后,我决定为生成的 Blob 数据创建一个 ObjectURL,并通过调用强制下载window.open()

我更改了处理程序中的预期响应,并在 FE 中添加了相应的调用。

处理程序.js

rest.post('/mock/things/:thingId/export', async (req, res, ctx) => {
  const docType = req.headers.get('Content-type');
  const startDate = req.url.searchParams.get('startDate');
  const endDate = req.url.searchParams.get('endDate');
  const selected = req.body;

  const resDataString = 'testName,testLastName,\r\nDaniel,Schaller';
  const blob = new Blob([resDataString], { type: docType });
  const buffer = await blob.arrayBuffer();

  return res(
    ctx.status(200),
    ctx.set({
      'content-type': `${docType}`,
      'Content-length': buffer.byteLength.toString(),
    }),
    ctx.body(buffer),
    ctx.delay(), …
Run Code Online (Sandbox Code Playgroud)

javascript xmlhttprequest http-headers axios msw

5
推荐指数
1
解决办法
2654
查看次数

无法通过 Vue.js(Axios 帖子)从 Laravel 后端下载文件(pdf)

我在 Vue 中有一个多步骤表单,一旦我收集了所有信息,我就会将结果发布到 Laravel 控制器。这是站点的经过身份验证的区域。我正在使用护照。所以基本上我有一个 Vue SPA,它是在 Laravel 5.7 框架内构建的网站的管理区域。

Vue file:
axios.post('/api/quotes/finalize', this.wizardModel)
                        .then(response => {
                            if (response.data.success) {
                                //
                            }
                        })
                        .catch(err => {
                            if (err.response.status == 401) {
                                window.location.href = '/login';
                            }
                            swal.showValidationError(
                                `Request failed: ${error}`
                            )

                        })
Run Code Online (Sandbox Code Playgroud)

控制器获取数据并制作 pdf。所有这些都在起作用。然后它需要查看三个操作 - 通过电子邮件发送 PDF、通过 CC 发送 PDF 以及下载 PDF。

    public function finalizeQuote(Request $request)
{
        $data = $request->all();
        $data['phone'] = $this->formatTelephone($data['phone']);

        $dateStamp = date('Ymdhis', strtotime('now'));
        $fileName = 'quote-' . $dateStamp . '.pdf';
        $html = View::make('quotes.quote', compact('data'))->render();

        $conv = new …
Run Code Online (Sandbox Code Playgroud)

laravel vue.js

3
推荐指数
1
解决办法
5217
查看次数