gpt4 book ai didi

javascript - 如何在 jquery .post 中将二进制文件保存在客户端上

转载 作者:行者123 更新时间:2023-11-29 22:29:49 24 4
gpt4 key购买 nike

我有这个代码的处理程序:

    HttpRequest request = context.Request;
HttpResponse response = context.Response;

if (request["Type"] != null)
{
try
{
string resultFile = null;
string fileName = string.Empty;

int type = Convert.ToInt32(request["Type"]);

switch (type)
{
case 1:
fileName = "InnerQuery.doc";
resultFile = GenerateInnerQuery(Id);
break;

case 2:
fileName = "CourierQuery.doc";
resultFile = GenerateCourierQuery(Id);
break;

case 3:
fileName = "TransportDogovor.doc";
resultFile = GenerateTransportDogovor(Id);
break;

case 4:
fileName = "TransportQuery.doc";
resultFile = GenerateTransportQuery(Id);
break;

case 5:
fileName = "PassQuery.doc";
resultFile = GeneratePassQuery(Id);
break;
}

if (resultFile != null)
{
response.Clear();
response.AddHeader("pragma", "no-cache");
response.AddHeader("cache-control", "private");
response.CacheControl = "no-cache";
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}",
System.Web.HttpUtility.UrlPathEncode(fileName)));
response.OutputStream.Write(File.ReadAllBytes(resultFile), 0, (int)(new FileInfo(resultFile)).Length);
response.End();
}
}
catch (Exception ex)
{ }
}

在客户端,我使用 jQuery.post() 将数据发布到处理程序:

var handler = "GetWord.ashx?Type=6";
var initiationDateFrom = $("#<%=InitiationDateFromTxt.ClientID%>").val();
var initiationDateTill = $("#<%=InitiationDateTillTxt.ClientID%>").val();
var queryDateFrom = $("#<%=QueryDateFromTxt.ClientID%>").val();
var queryDateTill = $("#<%=QueryDateTillTxt.ClientID%>").val();
var queryNumber = $("#<%=NumberTxt.ClientID%>").val();
var initiator = $("#<%=InitiatorTxt.ClientID%>").val();
var state = $("#<%=StateList.ClientID%>").val();
$.post(handler,
{
InitiationDateFrom: initiationDateFrom,
InitiationDateTill: initiationDateTill,
QueryDateFrom: queryDateFrom,
QueryDateTill: queryDateTill,
QueryNumber: queryNumber,
Initiator: initiator,
State: state
}, function (data) {
/*here i should save my file*/
});

我在“数据”中收到二进制字文件,但无法将其保存在客户端。

我上次使用:

window.location = handler;

但是对于 jQuery.post 是行不通的。

最佳答案

我认为这个问题的答案需要一些更新

我遇到了以下图书馆:https://github.com/eligrey/FileSaver.js

在我的案例中,它也很简单,如下所示:

至少这是适合我的解决方案,我只需要在 chrome (v37) 中支持它。

前言:

我需要通过邮寄请求下载 excel 文件。因此,在阅读了一些规范和问答后,我是如何解决这个问题的。

在我的 ajax 调用设置中,我将响应类型设置为“blob”:

'responseType': 'blob'

一旦收到成功的响应,您将需要执行一些小的 DOM 技巧来触发下载,如下所示:

var downloadLink = document.createElement('a');
downloadLink.download = 'export.xlsx';
downloadLink.innerHTML = 'Download File';
downloadLink.href = window.webkitURL.createObjectURL(data);
downloadLink.click();

关于javascript - 如何在 jquery .post 中将二进制文件保存在客户端上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7586923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com