我无法使用以下代码从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工作,没有任何签名证书
NSData.FromUrl
(Objective-C中的dataWithContentsOfURL:
)将返回任何错误的null
。
来自苹果文档:
如果无法创建数据对象,则返回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
更好了。
接下来,您需要为不受信任的证书提供担保。有几种不同的方法(有些方法比其他方法好得多)。我在这篇文章中可以找到他们(带源代码)的完整列表。