我需要从服务器下载文件。该文件存储在数据库中。我有一个cs控制器,可以将文件提供给UI。服务器GET调用如下所示:
http://server/api/controllername/fileid/data
当我在浏览器中运行该链接时它会起作用 - 该文件会关闭并进入下载区域(Chrome)。但是当我从我的Angualar代码发送相同的命令时,我看不到任何文件。控制台报告我的请求成功(代码200),但我什么都没看到。请让我知道要发布的代码片段,以便更容易提供帮助。
由于
答案 0 :(得分:1)
试试这段代码:
var a = document.createElement('a');
a.href = "http://server/api/controllername/fileid/data";
a.click();
您可以撰写连接变量和文本的地址。
答案 1 :(得分:1)
创建资源的链接,不要使用ajax处理它。
如果您在新标签页中打开链接,该标签会在实现刚刚打开以在大多数现代浏览器中下载文件后自动关闭。
答案 2 :(得分:1)
该文件可能正确地作为字节[]下载到调用它,但这对用户来说是没用的 - 就像我的问题一样。
在我的情况下,我需要下载一个包含一组复杂参数的文件。此示例JavaScript使用post请求并使用您提供的任何JavaScript对象创建表单(并将其发布)。如果您简化它,此代码可能会有所帮助:
private open(verb, url, data, target)
{
var form = document.createElement("form");
form.action = url;
form.method = verb;
form.target = target || "_self";
if (data) {
this.createFormParameters(form, "", data);
}
form.style.display = 'none';
document.body.appendChild(form);
form.submit();
}
private createFormParameters(form, key, value) {
// recursive algorithm to add parameters (including objects and arrays of objects) to a custom form
if (typeof value === "object") {
for (var item in value) {
if (Array.isArray(value[item])) {
for (var arrayItem in value[item]) {
this.createFormParameters(form, (item + "[" + arrayItem + "]."), value[item][arrayItem]);
}
continue;
}
var input = document.createElement("textarea");
input.name = key + item;
input.value = value[item];
form.appendChild(input);
}
}
else
{
var input = document.createElement("textarea");
input.name = key;
input.value = value;
form.appendChild(input);
}
}