我的一些时间轴项目设计需要多个图像,但我很难可靠地附加它们。 timeline.insert函数似乎只允许一个附件,插入时间轴项后插入附件有时会导致图像无法呈现。
我也尝试在时间轴项目本身上使用setAttachments,但在插入项目时似乎没有实际上传附件。使用下面的代码我倾向于得到混合的结果。有时它会起作用,有时则无法渲染图像。似乎与我在收到通知后等待查看通知的时间有关,如果我查看它太快它从未完全呈现。
有没有人对我如何克服这一点或看到我做错了什么有任何想法或建议?
//CardFactory.java - Create TimelineItem with attachment list
public static TimelineItem getConceptCard(String conceptImage) {
TimelineItem timelineItem = new TimelineItem();
timelineItem.setHtml("<article class=\"photo\">\n <img src=\"attachment:0\" width=\"100%\" height=\"100%\">\n <div class=\"photo-overlay\"/>\n <section>\n <p class=\"text-auto-size\">Test</p>\n </section>\n</article>\n");
List<Attachment> attachments = new ArrayList<Attachment>();
Attachment img1 = new Attachment();
img1.setId("backImage");
img1.setContentType("image/jpeg");
img1.setContentUrl(WebUtil.buildStaticImgUrl("cardconcepts/" + conceptImage + ".JPG"));
attachments.add(img1);
timelineItem.setAttachments(attachments);
timelineItem.setNotification(new NotificationConfig().setLevel("DEFAULT"));
return timelineItem;
}
//MainServlet.java - Send TimelineItem on button press
} else if (req.getParameter("operation").equals("insertConceptCard")) {
TimelineItem timelineItem = CardFactory.getConceptCard(req.getParameter("conceptCard"));
MirrorClient.insertTimelineCard(credential, timelineItem);
//MirrorClient.java - Insert TimelineItem with multiple attachments
public static void insertTimelineCard(Credential credential, TimelineItem item) throws IOException {
Mirror.Timeline timeline = getMirror(credential).timeline();
TimelineItem timelineItem = timeline.insert(item).execute();
for(Attachment TAttach : item.getAttachments()){
InputStreamContent mediaContent = new InputStreamContent(TAttach.getContentType(), new URL(TAttach.getContentUrl()).openStream());
timeline.attachments().insert(timelineItem.getId(), mediaContent).execute();
}
答案 0 :(得分:0)
我不确定是否可以根据您的要求,但如果附件是公共图像,您实际上并不需要附加它们。您可以将img标记与普通的http URL一起使用。我的经验是,这些得到的速度相当快,如果频繁使用它们会被缓存,即使它们没有立即渲染也能正确渲染。
(即使你的要求需要保持这些更私密,你可能希望使用标准图像提取与某种nonce而不是试图附加它们。我意识到这不能完全回答你的问题,但它可能是一个有用的解决方法。)