相关疑难解决方法(0)

JavaScript发布请求,如表单提交

我正在尝试将浏览器定向到其他页面.如果我想要一个GET请求,我可能会说

document.location.href = 'http://example.com/q=a';
Run Code Online (Sandbox Code Playgroud)

但是我试图访问的资源不会正常响应,除非我使用POST请求.如果这不是动态生成的,我可能会使用HTML

<form action="http://example.com/" method="POST">
  <input type="hidden" name="q" value="a">
</form>
Run Code Online (Sandbox Code Playgroud)

然后我只需从DOM提交表单.

但实际上我想要允许我说的JavaScript代码

post_to_url('http://example.com/', {'q':'a'});
Run Code Online (Sandbox Code Playgroud)

什么是最好的跨浏览器实现?

编辑

对不起,我不清楚.我需要一个改变浏览器位置的解决方案,就像提交表单一样.如果使用XMLHttpRequest可以实现这一点,那就不明显了.这不应该是异步的,也不应该使用XML,所以Ajax不是答案.

javascript forms post http submit

1465
推荐指数
17
解决办法
139万
查看次数

处理从ajax帖子下载的文件

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

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

编辑:

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

__PRE__

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

javascript ajax jquery

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

没有链接的JavaScript blob文件名

当强制通过window.location下载时,如何在JavaScript中设置blob文件的名称?

function newFile(data) {
    var json = JSON.stringify(data);
    var blob = new Blob([json], {type: "octet/stream"});
    var url  = window.URL.createObjectURL(blob);
    window.location.assign(url);
}
Run Code Online (Sandbox Code Playgroud)

运行上面的代码会立即下载文件而不会刷新页面,如下所示:

bfefe410-8d9c-4883-86c5-d76c50a24a1d

我想将文件名设置为my-download.json.

javascript html5 blob download html5-filesystem

161
推荐指数
7
解决办法
21万
查看次数

Spring - 将响应下载为文件

我正在使用AngularJS和Spring编写应用程序.我想向服务器发送请求并下载从控制器返回的响应作为文件.在控制器中,我有csv文件的内容(作为字符串),即1;2;3;4(1行,4列).将此响应作为文件下载的最简单方法是什么?

下面,我发布了我的简化代码.在Spring控制器中:

@RequestMapping(value = "/csv", method = GET)
@ResponseBody
public String getCsvFile() {
    return getCsvContent();
}
Run Code Online (Sandbox Code Playgroud)

在javascript(AngularJS)

return $http({method: 'GET', url: 'csv/'});
Run Code Online (Sandbox Code Playgroud)

我也试图写入响应流(下面),设置标题,但在客户端我总是把这个内容作为字符串 - 而不是作为要下载的文件.

@RequestMapping(value = "/csv", method = GET)
@ResponseBody
public void getCsvFile(HttpServletResponse response) {
    response.setContentType("application/csv");
    response.setHeader("Content-Disposition", "attachment; filename=file.csv");
    response.setContentLength(getCsvContent().getBytes().length);
    ServletOutputStream out = response.getOutputStream();
    out.write(getCsvContent());
    out.flush();
    out.close();
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何正确编写控制器的方法,以便在客户端下载响应作为文件?

spring angularjs

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

NodeJS如何从aws s3存储桶将文件下载到磁盘?

我的目标:

显示一个对话框,提示用户保存从aws下载的文件.

我的问题:

我目前正在使用awssum-amazon-s3来创建下载流.但是我只是设法将文件保存到我的服务器或将其流式传输到命令行......正如您从我的代码中看到的,我最后的尝试是尝试手动设置失败的内容处置标头.我不能使用res.download(),因为标题已经设置好了?

我怎样才能实现目标?

我的节点代码:

app.post('/dls/:dlKey', function(req, res, next){
        // download the file via aws s3 here
        var dlKey = req.param('dlKey');

        Dl.findOne({key:dlKey}, function(err, dl){
            if (err) return next(err);
            var files = dl.dlFile;

            var options = {
                BucketName    : 'xxxx',
                ObjectName    : files,
            };

            s3.GetObject(options, { stream : true }, function(err, data) {
                // stream this file to stdout
                fmt.sep();
                data.Headers['Content-Disposition'] = 'attachment';
                console.log(data.Headers);
                data.Stream.pipe(fs.createWriteStream('test.pdf'));
                data.Stream.on('end', function() {
                    console.log('File Downloaded!');
                });
            });
        });

        res.end('Successful Download Post!');
    });
Run Code Online (Sandbox Code Playgroud)

我的角度代码:

$scope.dlComplete = …
Run Code Online (Sandbox Code Playgroud)

disk download amazon-s3 amazon-web-services node.js

30
推荐指数
6
解决办法
5万
查看次数

使用Ajax从Servlet下载文件

我在servlet中创建了一个zip文件.现在我想使用Ajax触发该servlet并向用户提示下载对话框.我可以触发servlet,但我不知道如何获取保存对话框.我怎样才能做到这一点?

ajax servlets download save-as

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

使用ajax调用下载PHPExcel

App::import('Vendor', 'PHPExcel/Classes/PHPExcel');
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle('ReceivedMessages');
header('Content-Type: application/vnd.ms-excel');
$file_name = "kpi_form_".date("Y-m-d_H:i:s").".xls";
header("Content-Disposition: attachment; filename=$file_name");
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
Run Code Online (Sandbox Code Playgroud)

当我直接从浏览器调用上面的代码时,会下载结果文件.但是如果我对上面的代码进行ajax调用,我就不会得到下载提示.我可以从控制台选项卡中看到ajax调用已成功完成,并在响应数据中看到一堆随机字符.我假设那是excel对象.

有谁知道如何使用ajax实现下载excel功能?我不想刷新页面.当用户点击"导出"按钮时,应该对php文件进行ajax调用并提示用户下载.

php ajax jquery phpexcel

15
推荐指数
3
解决办法
4万
查看次数

下载需要身份验证令牌的文件

我正在实现一个带有 REST 后端的 AngularJS 应用程序(使用 Spring Boot)。

我目前可以下载这样的文件:

<td><a href="/api/datasheets/{{datasheet.id}}/documents/{{document.id}}/download" download>Download</a></td>
Run Code Online (Sandbox Code Playgroud)

现在,我正在为我的应用程序添加安全性(使用 Spring Security),现在这不再有效。AJAX 调用的身份验证通过x-auth-token为每个请求添加HTTP 标头来实现。

但是一个简单href的当然x-auth-token在标题中没有。我尝试$http.get()在 an 上使用ng-click,但这不行

有没有简单的替代方案?

ajax spring-security angularjs

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