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 问题