微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

触发 webmethod 下载文档的 Ajax 脚本在 Chrome 中工作,但在 Firefox 中根本不起作用

如何解决触发 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 举报,一经查实,本站将立刻删除。