Not sure if this is what you want, but if you actually post the image to FB, then FB is hosting it.
You can see the different post types here:
https://developers.facebook.com/docs/reference/api/page/#post_types
We chose "photos" because "links" didn't show image very large.
$api_call = '' . $network['network_id'] . '/photos'; //network_id is the page id
$attachment = array(
'access_token' => $network['network_token'], //access token
'source' => "@" . $image['image_path'], //must be actual path to image
'message' => $campaign['textresponse'],
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/' . $api_call);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to suppress the curl output
$result = curl_exec($ch);
curl_close ($ch);
echo "<br>";
return $result; //returns the post number as json string