如何解决触发 webmethod 下载文档的 Ajax 脚本在 Chrome 中工作,但在 Firefox 中根本不起作用
我在 ASP.NET 中有一个网页,用于下载文档。这个想法是用户必须输入电子邮件、姓名等才能访问正在下载的文档。我在 ASPSnippets.com 上找到了一个示例,我加强了它以使其更真实,这意味着不是将文档作为元素传递,而是将变量用作隐藏字段。到目前为止,在 Chrome 中,但在 Firefox 中它根本不起作用。
有什么想法吗?
<form runat="server">
<asp:HiddenField ID="hFilename" runat="server" ClientIDMode="Static" Value="Sample.pdf" />
<asp:TextBox ID="txtName" runat="server" ValidationGroup="gr1"></asp:TextBox>
<asp:requiredFieldValidator ID="requiredFieldValidator1" runat="server" ControlTovalidate="txtName" ErrorMessage="requiredFieldValidator" ValidationGroup="gr1"></asp:requiredFieldValidator>
<asp:Button ID="btnNew" runat="server" Text="Button" OnClientClick="if (Validate()) { DownloadFile()}" ValidationGroup="gr1" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
function Validate() {
if (Page_ClientValidate()) {
return true;
}
return false;
}
</script>
<script type="text/javascript">
function DownloadFile() {
var fileName = $('#<%=hFilename.ClientID%>').val();
$.ajax({
type: "POST",url: "VB.aspx/DownloadFile",data: '{fileName: "' + fileName + '",txtName:"' + $('#<%=txtName.ClientID%>').val() + '" }',contentType: "application/json; charset=utf-8",dataType: "json",success: function (r) {
//Convert Base64 string to Byte Array.
var bytes = Base64ToBytes(r.d);
//Convert Byte Array to BLOB.
var blob = new Blob([bytes],{ type: "application/octetstream" });
//Check the browser type and download the File.
var isIE = false || !!document.documentMode;
if (isIE) {
window.navigator.msSaveBlob(blob,fileName);
} else {
var url = window.URL || window.webkitURL;
link = url.createObjectURL(blob);
var a = $("<a />");
a.attr("download",fileName);
a.attr("href",link);
$("body").append(a);
a[0].click();
$("body").remove(a);
}
}
});
};
function Base64ToBytes(base64) {
var s = window.atob(base64);
var bytes = new Uint8Array(s.length);
for (var i = 0; i < s.length; i++) {
bytes[i] = s.charCodeAt(i);
}
return bytes;
};
</script>
</form>
这是背后的代码:
<WebMethod()>
Public Shared Function DownloadFile(ByVal fileName As String,ByVal txtName As String) As String
'Set the File Folder Path.
Dim path As String = HttpContext.Current.Server.MapPath("~")
'Read the File as Byte Array.
Dim bytes As Byte() = File.ReadAllBytes(path & fileName)
'Convert File to Base64 string and send to Client.
Return Convert.ToBase64String(bytes,bytes.Length)
End Function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。