Javascript 提交动态创建的表单

Javascript 提交动态创建的表单,javascript,angular,angular2-forms,Javascript,Angular,Angular2 Forms,我在我的一个项目中使用angular 2/4,在提交请求时我必须下载一个文件。我现在正在做 this._http.post('url', body, { headers: urlEncodedHeader, observe: 'response', responseType: 'arraybuffer' }) .subscribe((data) => { let blob = new Blob([data.body], { 'typ

我在我的一个项目中使用angular 2/4,在提交请求时我必须下载一个文件。我现在正在做

this._http.post('url', body, { headers: urlEncodedHeader, observe: 'response', responseType: 'arraybuffer' })
            .subscribe((data) => {

                let blob = new Blob([data.body], { 'type': 'application/octet-stream' });
                saveAs(blob, 'file.zip');
            })
文件大小可能非常大,因此我希望浏览器处理请求,而不是解析数据并在应用程序端创建blob。因此,我在某个地方读到,我们可以动态创建表单元素,并将句柄交给浏览器,而不是让应用程序处理blob并存储在内存中。所以我试过了

post_to_url(path, params, method) {
        method = method || "post";

        var form = document.createElement("form");
        form.setAttribute("method", method);
        form.setAttribute("action", path);

        for (var key in params) {
            if (params.hasOwnProperty(key)) {
                var hiddenField = document.createElement("input");
                hiddenField.setAttribute("type", "hidden");
                hiddenField.setAttribute("token", key);
                hiddenField.setAttribute("value", params[key]);

                form.appendChild(hiddenField);
            }
        }
        document.body.appendChild(form);
        form.submit();
    }

这似乎不起作用,页面总是重定向到某个错误页面。所以我的问题是,如何在不挂起浏览器的情况下下载一个巨大的文件。请提供帮助。

可能只需在
post
上生成下载文件的链接即可:

this._http.post('url', body, { headers: urlEncodedHeader, observe: 'response', responseType: 'arraybuffer' })
            .subscribe((data) => {

              let link = data.body; // //http://path/to/file;
              window.open(link);

              // or
            var link = document.createElement('a');
            link.href = link 
            link.click();
            });

问题是我在做什么

hiddenField.setAttribute("token", key);
而不是

hiddenField.setAttribute("name", key);

更改名称解决了我的问题“…某些错误页…”。似乎没有详细的错误描述。它只是将我重定向到一个页面,其中显示请求失败,Grizzy 2.4.0我的文件太大了…所以不能使用这种方法。@Vikhathmaiya,我的意思是在
发布
数据后,在响应中获取下载文件
URL
。好的解决方案