使用JavaScript在IE浏览器中将附件的内容显示为base64

时间:2015-11-12 22:42:57

标签: javascript c# jquery asp.net file

我正在调用一个返回附件的byte []的Web服务。然后我将byte []转换为base64字符串并将结果返回给客户端。我然后想在浏览器中显示这个返回的字符串(IE是必要的)。我找不到文件,因为我相信IE的URL长度限制略高于2000.我有什么选择显示返回的附件?如果无法显示,我如何提示用户使用JavaScript将附件保存到某个位置?

以下是我所拥有的:

// Ascx页面

  function retrieveAttachmentById() {
        var DTO = { 'p_attachmentID': "123", 'p_itemId': "1" };
        var url = "/_layouts/SharepointWebService/CustomService.asmx/GetAttachmentById";
        $.ajax
        ({
            type: "Post",
            url: url,
            data: JSON.stringify(DTO),
            async: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function add(msg) {
                var url = msg.d;

                // display base64 content.
                //  window.location(url) doesn't work in IE when url is over 2047 characters.                

            },
                    error: function () { }
        });
     }

// CustomService.asmx

[WebMethod]
    public string GetAttachmentById(int p_attachmentID, int p_itemId)
    {
        byte[] fileBuffer = //Call service passing in p_attachmentID and p_itemId
        var url64 = Convert.ToBase64String(fileBuffer); //Successful
        return url64;
    }

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要在web.config中添加以下条目。我相信这是jsonSerialization的最大值

<configuration>
  ...
  ...
<system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="2147483647"/>
      </webServices>
    </scripting>
  </system.web.extensions>
  <system.webServer>
...
...
</configuration>