PHP:使用curl发送上传的文件,而不上传到初始服务器

时间:2013-05-17 19:54:13

标签: php file-upload curl

我目前有一个允许文件上传的网站。当用户提交表单时,我运行一个php脚本,向我的api发送一个curl请求。

目前,php请求如下所示:

$params = array(
    'media' => "@" . $_FILES['media']['tmp_name']
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

api只检查$_FILES字段,然后抓取媒体并运行move_uploaded_file

因此文件直接从用户提交的表单卷曲到api服务器,文件从未实际上传(除了在表单提交和curl请求之间放置在tmp文件夹中),直到它到达api服务器。

这一切都适用于将文件上传到api服务器,但问题是服务器认为文件的扩展名是.tmp,而不是类似png,因为这是curl请求发送的文件。 / p>

如何在不先预先上传文件的情况下发送文件,以便api服务器知道实际发送的文件是什么?

1 个答案:

答案 0 :(得分:2)

两种方式:

  • 重命名tmp文件。您可以访问它,因此重命名它是微不足道的:rename(oldname, newname)
  • 发送mimetype。格式为:@filename;type=image/png用于png。

如果您关心文件名,请选择第一个选项,如果您只关心mime类型,请选择第二个选项。