Twitter API OAuth 文件上传出现错误“您必须提供可读文件”

Posted

技术标签:

【中文标题】Twitter API OAuth 文件上传出现错误“您必须提供可读文件”【英文标题】:Twitter API OAuth File upload gives error 'You must supply a readable file' 【发布时间】:2019-06-07 16:59:06 【问题描述】:

我已按照this 教程将媒体上传到 twitter API。文本上传完美,但如果我想上传媒体,我会收到错误:

致命错误:在 /hp/be/ac/on/www/vendor/abraham/twitteroauth/src/TwitterOAuth.php:297 中包含消息“您必须提供可读文件”的未捕获异常“InvalidArgumentException”:297 堆栈跟踪:# 0 /hp/be/ac/on/www/vendor/abraham/twitteroauth/src/TwitterOAuth.php(266): Abraham\TwitterOAuth\TwitterOAuth->uploadMediaNotChunked('https://upload....', 数组) #1 /hp/be/ac/on/www/posten.php(288): Abraham\TwitterOAuth\TwitterOAuth->upload('https://upload....', Array) #2 main 在 /hp/be 中抛出/ac/on/www/vendor/abraham/twitteroauth/src/TwitterOAuth.php 在第 297 行

这是我的代码:

$twitter = new TwitterOAuth(
    $config['consumer_key'],
    $config['consumer_secret'],
    $OAuthToken,
    $OAuthTokenSecret
);

$post_media = $twitter->upload('media/upload', ['media' => "/uploads/Bilder/1.png"]);

/**$parameters = [
    'status' => "Test description",
    'media_ids' => implode(',', [$post_media->media_id_string])
];

$result = $twitter->post('statuses/update', $parameters);**/

如你所见,我什至评论了这部分,从 $parameters 开始,但这并没有改变结果。所以错误一定在上传行。 正如https://github.com/abraham/twitteroauth/issues/562 中所说,我已经尝试用https://upload.twitter.com/1.1/media/upload.json 替换media/upload,但这也没有帮助。 我已经检查过,链接/uploads/Bilder/1.png 是正确的,并且引用了我服务器上的图像。那么,为什么脚本不起作用?

有人知道解决办法吗?

【问题讨论】:

您确定/uploads/Bilder/1.png 是正确的吗?开头的/ 表示服务器的根目录。由于您的错误消息以 /hp/be/ac/on/www/ 开头,我想知道该文件是否位于其他位置 - 或者是否允许 PHP 访问该位置。 @TerenceEden 在浏览器中我在myWebsi.te/uploads/Bilder/1.png 上找到了图片但是当我用/hp/be/ac/on/www/uploads/Bilder/1.png 替换/uploads/Bilder/1.png 时,它起作用了!所以谢谢!我假设 twitter API 会从外部抓取图片,所以我发布了外部链接。但在内部,整个网络空间都保存到/hp/be/ac/on/www/,所以我什至没有考虑提供这个链接。非常感谢! 哇!很高兴它对你有用。 【参考方案1】:

现在回答很晚,但可能会对某人有所帮助。下面的代码非常完美!

require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$content = $twitter->get("account/verify_credentials");
$tweet = "My tweet";
$imageMedia = $twitter->upload('media/upload', array('media' => '/path/to/image/image_name.png'));
$parameters = array("status" => $tweet, "media_ids" => $imageMedia->media_id_string);

$statuses = $twitter->post("statuses/update", $parameters);

【讨论】:

【参考方案2】:

同样的问题,不同的解决方案。

答案:“upload() 函数需要本地文件。URL 不起作用,必须先下载。

看这个问题:https://github.com/abraham/twitteroauth/issues/697

【讨论】:

【参考方案3】:

如果您想首先使用 twitter api 发布图像,您必须先下载它。实际上,upload() 函数需要一个本地文件。

【讨论】:

这与this other answer中的解决方案相同。

以上是关于Twitter API OAuth 文件上传出现错误“您必须提供可读文件”的主要内容,如果未能解决你的问题,请参考以下文章

Twitter OAuth API 超时(Nginx 还是 Twitter?)

Twitter API oauth/请求令牌页面不存在

使用 Twitter 搜索 API 的位置和 OAuth 问题

CSP 拒绝 API Twitter

ActionScript 3 使用Twitter API的PlayBook OAuth示例

带有node.js的Twitter应用OAuth