从远程URL下载并上传文件,而不保存到php cURL中的HDD

时间:2017-08-24 16:13:25

标签: php curl file-upload telegram-bot

我正在写两个电报机器人,我需要将照片/声音从一个发送到另一个。 如文档here中所述,您可以传递URL或使用multipart / form-data发布文件。 现在我可以获得发送到第一个机器人的图像的链接,这是这样的:

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;

1 个答案:

答案 0 :(得分:0)

好的,您无法根据电报FAQ

在漫游器之间发送任何消息类型

因此您不能将消息从一个电报机器人发送到另一电报机器人