java - 使用 Spring 和 Thymeleaf 嵌入具有精确时间的 YouTube 视频

标签 java spring video youtube thymeleaf

当我尝试使用 Spring 和 Thymeleaf 在 Java 项目中嵌入具有准确时间的 YouTube 视频时遇到问题。

1/工作场景: 当我尝试嵌入普通的 YouTube 视频时,它可以工作:
在 Controller 中我有这个: article.setVideo(视频); 其中 video 是 YouTube 视频的结束字符串:

示例视频链接:https://www.youtube.com/embed/s39mNwFuQDQ 这里video的值将是:s39mNwFuQDQ

现在在 html Thymeleaf View 中我有: html Thymeleaf view

<iframe width="560" height="315" th:src="@{https://www.youtube.com/embed/{url} (url=${article.video})}"   frameborder="0" alt="no video attached" allowfullscreen="1"></iframe>

它获取保存的视频字符串,将其连接到 https://www.youtube.com/embed/ 并且工作正常。

2/非工作场景: 当我尝试做同样的事情,但使用具有精确时间的 YouTube 视频时 – 它不起作用:

在 Controller 中我有这个:

article.setVideo(video + "?start="+ extOptions);

地点:

视频 - 是一个字符串; extOptions 是一个字符串。

结果我得到一个字符串

示例:https://www.youtube.com/embed/s39mNwFuQDQ?start=212 视频是 - s39mNwFuQDQ extOptions 是 - 212

现在在article.getVideo()中我有:s39mNwFuQDQ?start=212 - 这很好地保存在数据库中。

在 Thymeleaf html View 中我仍然有相同的代码。 不幸的是,我的视频此时没有在浏览器中显示(尝试了不同的浏览器)。

当我尝试像这样精确显示视频时:

<iframe width="560" height="315" th:src="@{https://www.youtube.com/embed/s39mNwFuQDQ?start=212}" frameborder="0" alt="no video attached" allowfullscreen="1">

它正在工作并且视频显示并从 212 秒开始。

这里可能出现什么问题?

我尝试了一些转义?标记,一些模式引用(正则表达式转义) - 但这没有帮助,这些只会用不需要的字符填充字符串。

有什么想法可以解决这个问题吗?

最佳答案

Thymeleaf 正在转义问号(在本例中应该如此)。如果您查看源代码,您会发现它将 ? 替换为 %3F。您应该这样做的方法是将开头保留在不同的变量中,并像这样构建 url:

th:src="@{https://www.youtube.com/embed/{url} (url=${article.video}, start=${article.start})}"

如果这不是一个选项,您可以将网址创建为字符串,但这样您就会面临某些攻击(如果您可以接收不受信任的视频网址输入)。

th:src="${'https://www.youtube.com/embed/' + url}"
<小时/>

回答编辑 - 如果 Controller 选项设置如下:

article.setVideo(video);           // example: video equals: s39mNwFuQDQ
article.setVideoLink(extOptions);  // example: extOptions equals: 212

Thymeleaf 的完整语法是:

<!-- Generated url: https://www.youtube.com/embed/s39mNwFuQDQ?start=212 -->
<iframe width="560" height="315" th:src="@{https://www.youtube.com/embed/{url}(url=${article.video}, start=${article.videoLink})}" frameborder="1" alt="no video attached" allowfullscreen="0"></iframe>

关于java - 使用 Spring 和 Thymeleaf 嵌入具有精确时间的 YouTube 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812412/

相关文章:

java - Sonar 的 Spring Boot 配置问题

java - 单击按钮 android eclipse 后出现空白页?

java - 如何在android中实现列表之间的拖放?

android - 如何在 Android 的 WebView 中播放 dailymotion 视频

java - Ehcache 中的元素过期是什么意思

java - Spring boot 多数据源配置

java - 如何获取ServletRequest的RequestMethod?

java - 如何高效处理Spring中的错误: Could not resolve view with name 'forward:/oauth/error'

php - 如何使用脚本将保存在服务器上的 .wav 和 .webm 转换为 .mp4 并将其保存在服务器上

audio - 无法使用 ffmpeg 加入 mp3 文件和 avi 文件