当前位置: 首页 > 知识库问答 >
问题:

如何使用Flickr API上传照片?

司寇祺
2023-03-14

我尝试了DPZFlickr,它在尝试上传时返回以下内容:

Array ( [stat] => fail [err] => Array ( ) )

检查Flickr API的响应,它与尝试Dantsu版本的phpFlickr时返回的结果相同,返回如下:

oauth_problem=signature_invalid&debug_sbs=...

我卷了自己的卷曲,返回如下:

Upload result: HTTP/1.1 200 OK Date: Wed, 23 Jan 2019 16:09:39 GMT Content-Type: text/xml; charset=utf-8 Content-Length: 109 P3P: policyref="https://policies.yahoo.com/w3c/p3p.xml", CP="CAO...
$consumerSecret = $flickrApiSecret;
$ap_url = "https://up.flickr.com/services/upload/";
$apiKey = $flickrApiKey;
$oauth_nonce = time();
$oauthToken = $_SESSION["FlickrSessionOauthData"]["oauth_request_token"];
$oauthTokenSecret = $_SESSION["FlickrSessionOauthData"]["oauth_request_token_secret"];
$text = "Test";
$signatureMethod = "HMAC-SHA1";
$oauthVersion = "1.0";
$timestamp = time();

$parms  = "description=".$text."&format=json&oauth_consumer_key=".$apiKey."&oauth_nonce=".$oauth_nonce;
$parms .= "&oauth_signature_method=".$signatureMethod."&oauth_timestamp=".$timestamp."&oauth_token=".$oauthToken;
$parms .= "&oauth_version=".$oauthVersion."&title=".$text;

$baseString  = "";
$baseString .= "POST&".urlencode($ap_url)."&".urlencode($parms);

$hashkey = $consumerSecret."&".$oauthTokenSecret;
$apiSignature = base64_encode(hash_hmac('sha1', $baseString, $hashkey, true));

$filePath = "/path_to_file/0.jpg";  
$postFields["description"] = $text;
$postFields["format"] = "json";
$postFields["photo"] = new \CurlFile($filePath, mime_content_type ( $filePath ), 'photo');
$postFields["title"] = $text;

print_r ($postFields);
print "<br />";

$url = "https://up.flickr.com/services/upload/";

$oauth_header = "oauth_consumer_key=".$apiKey.",oauth_nonce=".$oauth_nonce.",oauth_signature_method=".$signatureMethod.",oauth_timestamp=".$timestamp.",oauth_token=".$oauthToken.",oauth_version=".$oauthVersion.",oauth_signature=".$apiSignature;

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: OAuth ".$oauth_header));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$response = curl_exec ($curl);
curl_close ($curl); 
echo $response;

共有1个答案

桂德义
2023-03-14

这个问题和答案让我走上了正确的方向。

我仍然无法启动和运行我自己的CURL,但我设法在DPZFlickr的库中黑了几行代码来使其工作。

我将httprequest函数更新为:

private function httpRequest($url, $parameters)
{
    if (isset($parameters["photo"])) {
        $p = $parameters["photo"];
        $pf = substr($p, 1);

        $parameters["photo"] = new \CurlFile($pf, mime_content_type ( $pf ), 'photo');
    }

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_TIMEOUT, $this->httpTimeout);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

    if ($this->method == 'POST')
    {
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, TRUE);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters);
    }
    else
    {
        // Assume GET
        curl_setopt($curl, CURLOPT_URL, "$url?" . $this->joinParameters($parameters));
    }

    $response = curl_exec($curl);
    $headers = curl_getinfo($curl);

    curl_close($curl);

    $this->lastHttpResponseCode = $headers['http_code'];

    return $response;
}
 类似资料:
  • 我收到代码为200的响应,但图像没有上传到服务器

  • 我使用Flickrj-Android-2.0.0,并遵循OAuth流程。我也得到了访问令牌和秘密,但当我试图在flickr上传照片时,我得到了这个错误: 谢谢...

  • 我正试着上传一张照片,在被croppie剪切到GCS之后。gcs write(imageToUpload)方法失败,因为imageToUpload当前不是文件,而是Blob。有没有人知道一个办法让这件事成功?可能是python中一种将BLOB转换为文件的方法吗?可以从Croppie返回的图像类型有:1)画布,2)HTML,3)BLOB和4)Base64这里是文档(Ctrl-F“result”)。任

  • 问题内容: 因此,我目前找到了名为cropit的照片裁剪插件。演示在这里。因此,我想做的就是获取裁剪后的照片,并将照片的名称上传到mysql数据库,并使用php将其保存到目录中。 到目前为止,我有这个: HTML: jQUERY: 我需要的只是php设置代码,因为当我裁剪照片并选择Submit时,jquery返回序列化代码,而我通常不熟悉的所有这些代码都会出现。这是jquery返回的序列化代码的几

  • 我在这个模块中的主要目标是将用户的个人资料图片上传到Firebase存储库中,并将照片URL存储到Firestore(云Firestore)中。 注: 我上载的图像只有JPG和PNG格式。 这是跨平台应用程序,使用离子和角 null update-profile.component.html

  • 操作步骤: ①在"图层管理"模块,选择一个带有数据的图层。 ②点击记录弹出窗口。 ③点击"上传图片"按钮。 ④可以添加标注地点的照片信息,支持从本地上传和选择网络上的图片以及历史图片。 ⑤选择图片,进行添加图片。 ⑥点击"绑定图片"按钮。 提示: ●目前一个网点支持上传20张照片。 ●每张图片大小不超过5M。 操作动图: [查看原图]