2012-08-30 123 views
1

加載圖像,我不能從Zend服務器與下面的代碼加載圖像:無法從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:我的服務器工作throught HTTPS沒有任何簽名證書

回答

1

NSData.FromUrldataWithContentsOfURL:在Objective-C)將返回null任何錯誤。

從蘋果文檔:

返回nil如果數據對象無法創建。

所以出事了......

PS:我的服務器工作throught HTTPS沒有任何簽名證書

懷疑。您可能擁有自簽名證書(或者您的服務器不應該很高興)。反正...

如果在嘗試您的網址,Safari瀏覽器時(從你的iPhone/iPad的)發出警告,您的網站,那麼它落入出事了類別和null值你得到的是正常的。

您可能想嘗試使用HTTP:確保它與其他內容無關(例如網絡問題)。

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

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

這都會讓你一個例外(不受信任的SSL服務器),但IMO這已經不是簡單的一個null更好。

接下來,您需要擔保不受信任的證書。有幾種不同的方法可以做到這一點(有些比其他方法更好)。我相當完整的列表(源代碼)可以在article找到。