我有一个使用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实际上并未链接到它来自的网页,但我不知道如何处理这个问题。有什么我可以做的来解决它,或者我的代理控制器根本无法工作?如果它不起作用,我还能做些什么来显示这些图像?
编辑:我的另一个想法是,tileources可能没有加载,因为数据是作为字符串而不是作为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>
答案 0 :(得分:0)
不幸的是,OpenSeadragon还不支持直接传递XML;你必须打破这些信息。请参阅答案: