无法从Zend服务器加载图像

时间:2012-08-30 09:13:15

标签: ios zend-framework https xamarin.ios nsdata

我无法使用以下代码从Zend服务器加载图像:

Console.WriteLine(">" + url);
Console.WriteLine(">" + NSUrl.FromString(url));
Console.WriteLine(">" + NSData.FromUrl(NSUrl.FromString(url))); // Null on this line

只有当我尝试从我的服务器加载图片时才会出现,任何其他来源都可以正常工作。这是我的Zend控制器代码:

public function getAction()
{
    $file_id = (int)$this->_getParam('id');
    $file = $this->fileModel->getById($file_id);

    $this->getResponse()
        ->setHttpResponseCode(200)
        ->setHeader('Pragma', 'public', true)
        ->setHeader('Expires', '', true)
        ->setHeader('Cache-Control', 'public', true)
        ->setHeader('Cache-Control', 'max-age=3800')
        ->setHeader('Content-type', $file->CONTENT_TYPE, true)
        ->setHeader('Content-Length', $file->FILE_SIZE)
        ->clearBody();
    $this->getResponse()->sendHeaders();

    echo base64_decode($file->FILEBODY);
    exit;
}

图片在浏览器中显示正常。我的代码出了什么问题?

PS:我的服务器通过HTTPS工作,没有任何签名证书

1 个答案:

答案 0 :(得分:1)

NSData.FromUrl(Objective-C中的dataWithContentsOfURL:)会返回null以查找错误。

来自Apple文档:

  

如果无法创建数据对象,则返回nil。

所以出了点问题......

  

PS:我的服务器通过HTTPS工作,没有任何签名证书

疑。您可能拥有自签名证书(或者您的服务器不应该满意)。总之...

如果在尝试使用您的网址时,Safari(来自您的iPhone / iPad)会向您发出关于您网站的警告,那么它会落入出错的类别,而您获得的null值则是正常。

您可能想尝试HTTP:确保它与其他内容无关(例如网络问题)。

现在,如果你 想要使用不受信任的SSL服务器,你可以使用一些.NET API,例如WebClient

 var wc = new WebClient ();
 byte[] data = wc.DownloadData (url);

仅此一项就会给你一个例外(不受信任的SSL服务器),但IMO已经比仅仅null好了。

接下来,您需要担保不受信任的证书。有几种不同的方法可以做到(有些方法比其他方法好得多)。我可以在article找到相当完整的代码列表(包括源代码)。