使用 cURL 将 PHP 文件上传到 imageshack

Posted

技术标签:

【中文标题】使用 cURL 将 PHP 文件上传到 imageshack【英文标题】:Uploading file with PHP to imageshack using cURL 【发布时间】:2012-01-06 15:34:22 【问题描述】:

我正在尝试使用以下脚本将文件上传到 imageshack:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://post.imageshack.us/');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POST, true);
$post = array(
    'fileupload'=> '@../../resources/images/cancel.png',
    'optsize' => 'resample',
    'rembar' => '1'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
curl_close($ch);

echo $response;

但是,我从 imageshack 收到以下错误:

Wrong file type detected for file cancel.png:application/octet-stream.

为什么会这样,如何解决?提前致谢!

编辑: 当我使用 JPG 或 GIF(甚至是动画,虽然 Imageshack 会取消动画,我认为只使用第一帧)时它确实有效,但不适用于 PNG。

编辑 2: 我发现了如何解决它。如前所述,它只接受 JPG 和 GIF。所以我把我需要上传的图片的位置,复制到一个临时位置.jpg结尾,上传文件,然后,完成后,我从临时文件中删除文件位置。

【问题讨论】:

【参考方案1】:

将 Content-type 设置为文件的类型。

根据手册,它必须是数组或对象。所以这里

$arr = array('Content-type: text/plain') ;
curl_setopt ( $ch , CURL_HTTPHEADER , $arr );

【讨论】:

警告:curl_setopt() [function.curl-setopt]:您必须在...中传递带有 CURLOPT_HTTPHEADER、CURLOPT_QUOTE、CURLOPT_HTTP200ALIASES 和 CURLOPT_POSTQUOTE 参数的对象或数组 所以我尝试了这种方式:curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type' => 'image/png')); 但它仍然不起作用。 @arik-so 反应如何?您应该检查您的 png 是否有效。 响应和之前一样。我也尝试使用二进制传输,但仍然无法正常工作。但是,当我尝试使用另一张图片时,它确实有效,但只是第一次。

以上是关于使用 cURL 将 PHP 文件上传到 imageshack的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTML 表单、cURL 和 PHP 将文件上传到 Imageshack API

使用PHP和cURL通过它们的API将文件上传到RapidShare

PHP 5.6 如何使用 CURL 上传文件

php curl上传文件

在邮递员中使用 php curl 将文件上传到 Nextcloud 但上传的文件为空

如何将 curl 上传进度发送到要显示的 ajax