【问题标题】:Cannot load image from Zend server无法从 Zend 服务器加载图像
【发布时间】:2012-08-30 09:13:15
【问题描述】:

我无法使用以下代码从 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 工作,没有任何签名证书

【问题讨论】:

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


    【解决方案1】:

    NSData.FromUrl(Objective-C 中的dataWithContentsOfURL:)将返回null 任何错误。

    来自 Apple 文档:

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

    所以出了点问题……

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

    怀疑。您可能有一个自签名证书(或者您的服务器不应该高兴)。总之……

    如果在尝试您的 URL 时,Safari(来自您的 iPhone/iPad)警告您有关您的网站,那么它属于 出了点问题 类别,并且您获得的 null 值是正常的。

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

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

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

    仅此一项就会让您获得例外(不受信任的 SSL 服务器),但 IMO 已经比简单的 null 更好。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多