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);
}
ツイートはユーザーのタイムラインに投稿され、正しいサイズ (ソース画像と同様に 640x640) の JPG 画像が含まれていますが、実際の画像データは破損しています! 以下は、私の Twitter タイムラインに表示される破損した画像の例です: https://pbs.twimg.com/media/BVC5M5pCcAApIgP.jpg:large
私の最初の考えは、画像データが何らかの形で切り捨てられているということでした。ただし、上記のコード サンプルの logger.info 行で、画像を指す URLResource が元の画像のファイルサイズと一致するコンテンツの長さを報告することを確認しました。
このコードが破損した画像データを twitter に送信している理由がわかりません。Spring のフレームワークの TweetData.withMedia 関数を使用して画像を twitter に投稿する実際の例を検索しましたが、見つけることができませんでした。