0

我有一个使用 OpenSeadragon 来显示深度缩放图像的站点。我让它处理一些测试图像,但我需要的图像位于一个域上,由于安全问题(没有“Access-Control-Allow-Origin”标头),我无法从我的网页访问。作为记录,托管 DZI 图像的页面归我的公司所有,但由于它是 Amazon S3 站点,我无法将标题添加到该站点,因为 Amazon 不提供该功能。

我创建了一个代理控制器,控制器成功地获取了它需要的 XML 数据。这是我的控制器代码:

public HttpResponseMessage Get(string bucket, string guid)
    {
        guid = guid.ToLower(); // in case guid is passed as uppercase
        string url = "http://" + bucket + ".img.mywebsite.org/" + guid +  ".xml";

        WebRequest request = WebRequest.Create(url);
        request.Credentials = CredentialCache.DefaultCredentials;
        WebResponse response = request.GetResponse();
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string serverData = reader.ReadToEnd();
        Console.WriteLine(serverData);
        reader.Close();
        response.Close();

        // create new XML doc
        // load serverData into XML doc
        // return XMLdoc

        return new HttpResponseMessage()
        {
            Content = new StringContent(serverData)
        };
    }

控制器正确返回 XML 数据。例如,当我访问http://mysite.mvc/api/test?bucket=66&guid=e41de95d-6235-4581-b823-4887b50eb8ad时,我得到一个包含正确外观的 XML 数据的页面。我还在 DHC chrome 扩展上对此进行了测试。

在我的网页上,我对代理控制器进行 Ajax 调用,并使用返回的 XML 打开 Seadragon:

        var imgdata = {
            bucket: "66",
            guid: "e41de95d-6235-4581-b823-4887b50eb8ad",
        };

        var ajaxresult = $.ajax({
            url: "/api/test",
            type: 'get',
            success: function(data) {
                //alert("Success");
                alert(data);
                var viewer = OpenSeadragon({
                    id: "viewerdiv",
                    prefixUrl: "../../Scripts/openseadragon/images/",
                    tileSources: data 
                });

            },
            error: function(jqXHR, textStatus, errorThrown) {
                alert(jqXHR.responseText || textStatus);
            },
            data: imgdata
        });
        console.log(ajaxresult);    

我的 Ajax 成功函数中的警报显示了我期望的 XML。但是,在我的 Seadragon 查看器中,瓷砖不显示(但查看器是打开的,并且导航按钮在那里)。在我的控制台中,我有这样的回应:

Tile a.Tile failed to load: 10/01.jpg

对于图像中的每个图块。我怀疑这是因为我的 Seadragon 查看器是用静态 XML 打开的,而该静态 XML 实际上并没有链接到它来自的网页,但我不知道该怎么做。我可以做些什么来修复它,还是我的代理控制器根本无法工作?如果它不起作用,我还能做些什么来显示这些图像?

编辑:我的另一个想法是,也许 tilesources 没有加载,因为数据是作为字符串而不是作为 XML 文档传入的?

我也试过这个而不是 OpenSeadragon()

var viewer = new Seadragon.Viewer("familysearch");
viewer.openDzi(data);

但在我的 Seadragon 查看器中出现 400 错误请求错误。

我还尝试使用 data.substring(38) 切掉 XML 的标题,但同样的错误。我的 XML 如下所示:

<?xml version="1.0" encoding="utf-8"?>
    <Image TileSize="256" Overlap="1" Format="jpg" ServerFormat="Default" xmlns="http://schemas.microsoft.com/deepzoom/2009">
        <Size Width="550" Height="1765" />
    </Image>
4

1 回答 1

0

不幸的是 OpenSeadragon 还不支持直接传递 XML;你必须分解信息。在这里查看答案:

https://github.com/openseadragon/openseadragon/issues/460

于 2014-08-15T16:39:52.470 回答