【问题标题】:Corrupted image when posting a tweet using spring framework twitter API使用 Spring 框架 Twitter API 发布推文时图像损坏
【发布时间】:2013-09-27 18:41:21
【问题描述】:

我正在尝试使用 Spring 框架的 twitter API 从 Java Tomcat 服务器发布带有嵌入式图像的推文。该图像是在线托管的 JPG(通过 Amazon Cloudfront CDN)。我尝试在下面的代码 sn-p 中使用 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 的工作示例,但我一直找不到。

【问题讨论】:

    标签: java spring twitter


    【解决方案1】:

    您没有指定您使用的是哪个版本的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);
    

    祝你好运!

    【讨论】:

    • 问题已被标记为已修复,我仍然遇到 RC1 版本的损坏图像。一切正常吗?
    • 不太希望“恢复到不那么损坏的版本”;-) 你知道他们的 javadocs 是否有一个版本,其中确实包含一些实际的 cmets 和方法描述?
    猜你喜欢
    • 2015-10-16
    • 2020-03-30
    • 2021-12-31
    • 1970-01-01
    • 2013-04-03
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多