api.telegram.org/file/bot<Token>/photos/file_6.jpg
来自电报。但奇怪的是,电报不会接受该链接作为图片网址。如果您打开它,您的浏览器将显示一个保存对话框而不是显示图像。 (谁知道为什么?)
所以我决定这样做:
首先我下载文件并将其保存到磁盘:
$json = file_get_contents(API-URL . "/getFile?file_id=" . $contentOrID);
$json = json_decode($json, true);
$path = (string)$json['result']['file_path'];
if (!file_exists(FILE-HOST-URL . "/" . $path)) {
file_put_contents("photos/" . $path, file_get_contents(FILE-HOST-URL . "/" . $path));
}
然后我发布:
$url = API-URL. '/SendPhoto';
$postfields= array(
'chat_id' => $ChatID,
'photo' => new CURLFile(realpath("photos/" . $path)),
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type:multipart/form-data"
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$log = curl_exec($ch);
工作正常,但由于从硬盘写入/读取它很慢。 有什么办法我可以在不保存到硬盘的情况下实现这一点吗? 我试过这些但没有工作:
$postfields = array(
'chat_id' => $ChatID,
'photo' => file_get_contents(FILE-HOST-URL . "/" . $path)
);
// then post the above using curl
或使用cURL下载文件并将curl_exec()返回值传递给&#39;照片&#39;在$ postfields;