Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用API下载文件不起作用_Javascript_Api - Fatal编程技术网

Javascript 使用API下载文件不起作用

Javascript 使用API下载文件不起作用,javascript,api,Javascript,Api,我对下载方法的API调用有问题 下面是我正在使用的JS代码,它与knockout一起使用: self.downloadFile = function(file) { // Ajax Call Get All Leave Records $.ajax({ type: "POST", url: "/api/v1/CompanyFilesApi/DownloadFile", contentType: "application/json;

我对下载方法的API调用有问题

下面是我正在使用的JS代码,它与knockout一起使用:

self.downloadFile = function(file) {
    // Ajax Call Get All Leave Records
    $.ajax({
        type: "POST",
        url: "/api/v1/CompanyFilesApi/DownloadFile",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: ko.toJSON(file),
        success: function (data) {
            console.log("Here is your file");
        },
        error: function (error) {

            alert(error.status + " <--and--> " + error.statusText);
        }
    });
    // Ends Here
};
file参数包含文件路径和名称

谁能告诉我我做错了什么

响应总是正常的,但它会进入错误分支,并且文件未打开。文件为PDF、Excel、Word。

编辑2:

您可以使用target=“\u blank”代替下载在新选项卡中打开pdf

要修改“a”标记,请执行以下操作:

$("#your-a-tag-id").attr("href", "data:application/octet-stream;base64," + fileDataString);

编辑: 这也可以帮助你


一种解决方案是编码到base64并使用它:

...
dataType: "application/octet-stream;base64"
...
然后将响应数据放在a href中

<a href="data:application/octet-stream;base64,/*YOUR FILE DATA*/" download="your filename">

但我不知道如何在API中处理这个问题。

编辑2:

您可以使用target=“\u blank”代替下载在新选项卡中打开pdf

要修改“a”标记,请执行以下操作:

$("#your-a-tag-id").attr("href", "data:application/octet-stream;base64," + fileDataString);

编辑: 这也可以帮助你


一种解决方案是编码到base64并使用它:

...
dataType: "application/octet-stream;base64"
...
然后将响应数据放在a href中

<a href="data:application/octet-stream;base64,/*YOUR FILE DATA*/" download="your filename">


不过,我不知道如何在API中处理这个问题。

您的API返回一个八位字节流,但您的ajax调用需要数据类型:jsonOk,我明白您的意思。我做了更改,现在它没有出现错误分支,但文件仍然没有下载/保存。我该怎么做?你的数据对象中有什么?一个PDF文档作为内容,这是来自Fiddler的答案。你的api返回一个八位字节流,但是你的ajax调用需要数据类型:jsonOk,我明白你的意思。我做了更改,现在它没有出现错误分支,但文件仍然没有下载/保存。我该怎么做?你的数据对象中有什么?一个PDF文档作为内容,这是来自Fiddler的答案。我不知道这是否可能在响应后将数据放入标记中。它是?另一种想法是,我不使用html5标记“下载”,因为它不受旧浏览器的支持,例如IE8I将尝试新的答案,并提供更多详细信息。TnxI甚至不知道在响应之后是否可以将数据放入标记中。它是?另一种想法是,我不使用html5标记“下载”,因为它不受旧浏览器的支持,例如IE8I将尝试新的答案,并提供更多详细信息。Tnx