我正在尝试使用 Spring 框架的推特 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,与源图像一样)——但是,实际图像数据已损坏!这是最终出现在我的推特时间轴上的损坏图像的示例:https://pbs.twimg.com/media/BVC5M5pCcAApIgP.jpg:large
我的第一个想法是图像数据以某种方式被截断了。但是,我已经通过上面代码示例中的 logger.info 行确认指向图像的 URLResource 报告的内容长度与原始图像的文件大小相匹配。
我不确定为什么这段代码会向 Twitter 发送损坏的图像数据。我已经搜索了使用 Spring 框架中的 TweetData.withMedia 函数将图像发布到 Twitter 的工作示例,但我没能找到一个。
最佳答案
您没有指定您使用的 spring-social-twitter
版本,但希望您会发现它有用。根据您对 TweetData
类的使用,您的代码表明您使用的是 1.1.0.M4 或更高版本。
我最近发现我的应用程序存在同样的问题。它发生在我从 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);
祝你好运!
关于java - 使用 spring 框架 twitter API 发布推文时图像损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057870/