我可以使用下面的示例代码上传gif和视频,但是当我尝试上传图像时,出现以下错误。我在INIT,APPEND和FINALIZE步骤中获得了成功,但是在检查MEDIA WITH TWEET步骤时却出现了错误。
INIT
private static string path = @"..\Desktop\file.jpg";
private static string size = new FileInfo(path).Length.ToString();
var client = new RestClient("https://upload.twitter.com/1.1/media/upload.json")
{
Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
};
var mimeType = MimeMapping.GetMimeMapping(path.Split('\\').Last());
var request = new RestRequest(Method.POST);
request.AddParameter("command", "INIT");
request.AddParameter("total_bytes", size);
request.AddParameter("media_type", mimeType);
request.AddParameter("media_category", "tweet_image");
IRestResponse response = client.Execute(request);
结果
{“ media_id”:1191965427213250561,“ media_id_string”:“ 1191965427213250561”,“ expires_after_secs”:86399,“ media_key”:“ 3_1191965427213250561”}
APPEND
const int chunkSize = 2 * 1024 * 1024; //2MB
var fileArr = File.ReadAllBytes(path);
var chkList = GetBinaryChunks(fileArr, chunkSize);
var count = 0;
foreach (var item in chkList)
{
var client1 = new RestClient("https://upload.twitter.com/1.1/media/upload.json")
{
Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
};
var request1 = new RestRequest(Method.POST);
request1.AddHeader("Content-Type", "multipart/form-data");
request1.AddParameter("command", "APPEND");
request1.AddParameter("media_id", response.Data.media_id_string);
request1.AddFileBytes("media", item, "test");
request1.AddParameter("segment_index", count.ToString());
IRestResponse response1 = client1.Execute(request1);
count++;
}
确定
var client2 = new RestClient("https://upload.twitter.com/1.1/media/upload.json")
{
Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
};
var request2 = new RestRequest(Method.POST);
request2.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request2.AddParameter("command", "FINALIZE");
request2.AddParameter("media_id", response.Data.media_id_string);
IRestResponse response2 = client2.Execute(request2);
结果
{“ media_id”:1191965427213250561,“ media_id_string”:“ 1191965427213250561”,“ media_key”:“ 3_1191965427213250561”,“ size”:2504642,“ expires_after_secs”:86400,“ image”:{“ image_type”:“ image / jpeg“,” w“:5760,” h“:3840}}
带Tweet的媒体
var client6 = new RestClient("https://api.twitter.com/1.1/statuses/update.json")
{
Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
};
var request6 = new RestRequest(Method.POST);
request6.AddParameter("status", "6mb jpg");
request6.AddParameter("in_reply_to_status_id", "xxxxxxxxxxxxxxx");
request6.AddParameter("media_ids", response.Data.media_id_string);
IRestResponse response6 = client6.Execute(request6);
结果
{“错误”:[{“代码”:324,“消息”:“无效的媒体”}]}