我正在尝试使用Spring框架的twitter API发布带有来自Java Tomcat服务器的嵌入图像的推文。该图像是在线托管的JPG(通过Amazon Cloudfront CDN)。我尝试在下面的代码片段中使用updateTweet函数发布:
import org.springframework.social.twitter.api.TweetData;
import org.springframework.social.twitter.api.TwitterProfile;
import org.springframework.social.twitter.api.Tweet;
import org.springframework.social.twitter.api.impl.TwitterTemplate;
// ...
public Tweet updateTweet(String accessToken, String accessTokenSecret, String tweetMessage, String imageUrl){
TwitterTemplate twitter = new TwitterTemplate(twitterConsumerKey, twitterConsumerSecret, accessToken, accessTokenSecret);
twitter.setRequestFactory(twitterHttpRequestFactory);
TweetData tweetData = new TweetData(tweetMessage);
try {
UrlResource imageUrlResource = new UrlResource(imageUrl);
logger.info("Trying to tweet image with url {} content length {}", imageUrl, imageUrlResource.contentLength());
tweetData = tweetData.withMedia(imageUrlResource);
} catch(MalformedURLException e) {
logger.error("Malformed url for tweet image: {}", imageUrl);
} catch(IOException e) {
logger.error("IOException for tweet image {}\n{}", imageUrl, e);
}
return twitter.timelineOperations().updateStatus(tweetData);
}
推文发布到我的用户的时间轴,并且包含一个具有正确尺寸的JPG图像(640x640,就像源图像一样) - 然而,实际图像数据已损坏!以下是在我的Twitter时间轴上结束的损坏图像的示例:https://pbs.twimg.com/media/BVC5M5pCcAApIgP.jpg:large
我的第一个想法是图像数据以某种方式被截断。但是,我已通过上面代码示例中的logger.info行确认指向图像的URLResource报告的内容长度与原始图像的文件大小相匹配。
我不确定为什么此代码将损坏的图像数据发送到twitter。我搜索了使用Spring框架中的TweetData.withMedia函数将图像发布到twitter的工作示例,但我找不到。
答案 0 :(得分:0)
您没有指定正在使用的spring-social-twitter
版本,但希望您会发现这很有用。根据您对TweetData
类的使用情况,您的代码建议您使用1.1.0.M4或更高版本。
我最近发现我的应用程序存在同样的问题。它发生在我升级后#34;从spring-social-twitter
1.0.3.RELEASE到1.1.0.M4。在我恢复到1.0.3.RELEASE后,问题得到解决。恢复到1.1.0.M3也解决了这个问题。
这个错误记录在Spring Social Twitter的Jira数据库中:
https://jira.springsource.org/browse/SOCIALTW-71
如果您恢复到较不破损的版本,则必须停止使用TweetData
。以下是:
TweetData tweetData = new TweetData(caption).withMedia(image);
timelineOperations.updateStatus(tweetData);
变为
timelineOperations.updateStatus(caption, image);
祝你好运!