Javascript 提交动态创建的表单
我在我的一个项目中使用angular 2/4,在提交请求时我必须下载一个文件。我现在正在做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
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
。好的解决方案