在thymeleaf spring框架中从本地目录插入图像(使用maven)

rggaifut  于 2023-03-28  发布在  Spring
关注(0)|答案(8)|浏览(207)

我使用这个链接开发了一个项目:https://spring.io/guides/gs/serving-web-content/我用maven开发了上面的项目。
我在这个. abc.html和xyz.html下有两个html文件。为了在html页面中插入图像,我使用了这样的URL:

<img src="https://example.com/pic_mountain.jpg" alt="Mountain View" style="width:304px;height:228px">

但我想使用一个图像文件位于我的服务器,而不是.我试图将文件放在同一目录的html文件,但它不工作.我甚至试图给完整的路径,但没有用.这是一个ubuntu操作系统.请帮助我在这里.有没有任何地方,我可以配置基本路径或基本上如何把我的本地文件夹中的图像.

f87krz0w

f87krz0w1#

我想让你看看Thymeleaf的Standard URL Syntax文档,特别是上下文相关和服务器相关的URL模式。

上下文相关URL:

如果你想在你的webapp中链接资源,那么你应该使用context relative url。这些URL应该是相对于web应用程序安装在服务器上后的根目录。例如,如果我们将myapp.war文件部署到Tomcat服务器,我们的应用程序可能会以http://localhost:8080/myapp的形式访问,myapp将是上下文名称。
作为JB Nizet,以下内容将为您工作,因为我在一个webapp项目中亲自使用了thymeleaf,

<img th:src="@{/images/test.png}"/>

test.png应该在webapp文件夹中的项目根目录下。

Myapp->webapp->images->test.png
  • 例如:*
<img th:src="@{/resources/images/Picture.png}" />
  • 输出为:*
<img src="/resources/image/Picture.png" />

当你在浏览器中点击http://localhost:8080/myapp/resources/images/Picture.png时,你应该能够访问上面的语法的图像。你的资源文件夹可能在你的应用程序的webapp文件夹下。

服务器相对URL:

相对于服务器的URL与相对于上下文的URL非常相似,不同之处在于它们不假定您希望URL链接到应用程序上下文中的资源,因此允许您链接到同一服务器中的不同上下文

  • 语法:*
<img th:src="@{~/billing-app/images/Invoice.png}">

输出为:

<a href="/billing-app/showDetails.htm">

如果服务器中存在名为billing-app的应用程序,则将从与您的上下文不同的应用程序加载上面的图像。

nx7onnlm

nx7onnlm2#

你需要了解HTTP是如何工作的。当浏览器在URL加载一个页面

http://some.host/myWebApp/foo/bar.html

HTML页面包含

<img src="images/test.png"/>

浏览器将向服务器发送第二个HTTP请求以加载图像。由于路径是相对的,因此图像的URL将是http://some.host/myWebApp/foo/images/test.png。请注意,绝对路径由页面的当前“目录”组成,并与图像的相对路径连接。服务器端JSP或thymeleaf模板的路径在这里完全无关。重要的是页面的URL,在典型的Spring MVC应用程序中,此URL是发送初始请求的控制器的URL。
如果图像的路径是绝对路径:

<img src="/myWebApp/images/test.png"/>

然后浏览器将向URL http://some.host/myWebApp/images/test.png发送第二个请求。浏览器从Web服务器的根目录开始,并连接绝对路径。
为了能够引用图像,无论页面的URL是什么,绝对路径都是首选且更易于使用。
在上面的示例中,/myWebApp是应用程序的上下文路径,您通常不希望在路径中硬编码,因为它可能会更改。值得庆幸的是,根据thymeleaf documentation,thymeleaf理解这一点并提供上下文相关路径的语法,从而将/images/test.png等路径转换为/myWebApp/images/test.png。因此,您的图像应该如下所示

<img th:src="@{/images/test.png}"/>

(我从来没有使用过thymeleaf,但这是我从文档中推断出来的)。
因此,test.png图像应该位于webapp根目录下的images文件夹中。

k97glaaz

k97glaaz3#

在Internet上获取链接:

String src = "https://example.com/image.jpg";

HTML:<img th:src="@{${src}}"/>

nr7wwzry

nr7wwzry4#

我用过贝罗就像..

我的形象路径就像贝娄。

我已经使用了下载图像的代码

<img th:src="@{imges/photo_male_6.jpg}" >

对我来说很好。

xe55xuns

xe55xuns5#

最近我遇到了类似的问题,但在我的情况下,Spring Security 是一个问题。正如在其他答案和文档中提到的:

<img th:src="@{/img/values.png}" alt="Media Resource"/>

应该足够了。但是由于Spring Security 已经添加到我的项目中,我不得不使用所有**/img/****来获取Requests并添加addResourceHandlers。代码如下:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(
                "/webjars/**",
                "/img/**",
                "/css/**",
                "/js/**")
                .addResourceLocations(
                        "classpath:/META-INF/resources/webjars/",
                        "classpath:/static/img/",
                        "classpath:/static/css/",
                        "classpath:/static/js/");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.ALWAYS);

        http.authorizeRequests().antMatchers(HttpMethod.GET, "/js/**", "/css/**", "/img/**" ,"/pressiplus", "/public/**", "/index", "/", "/login").permitAll();
        http.authorizeRequests()
                .antMatchers("/secure/admin/**").hasAnyRole("ADMIN","USER")
                .antMatchers("/secure/admin/**").hasAnyRole("ADMIN")
                .and()
                .formLogin()  //login configuration
                    .loginPage("/login")
                    .failureUrl("/login-error")
                    .loginProcessingUrl("/login")
                    .usernameParameter("email")
                    .passwordParameter("password")
                    .successHandler(myAuthenticationSuccessHandler())
                .and()
                .logout()    //logout configuration
                .logoutUrl("/logout")
                .logoutSuccessHandler(myLogoutSuccessHandler)
                .and()
                    .rememberMe()
                        .tokenRepository(persistentTokenRepository())
                        .tokenValiditySeconds(7 * 24 * 60 * 60) // expires in 7 days
                .and()
                    .exceptionHandling() //exception handling configuration
                .accessDeniedHandler(accessDeniedHandler());
    }

}

我希望这对将来的某人有帮助

5kgi1eie

5kgi1eie6#

动态检索链接的用户使用此模式

<img class="image" th:src="@{'/resources/images/avatars/'+${theUser.avatar}}" alt="Avatar">

如果你像这样使用(${theUser.avatar}),它将添加?在上面版本链接看起来像这样:/resources/images/avatars/photoname.png

4c8rllxm

4c8rllxm7#

正如DimaSan在这里所说的https://stackoverflow.com/a/40914668/12312156你应该像这样设置图像src:

<img src="../static/img/signature.png" th:src="@{img/signature.png}"/>
mo49yndu

mo49yndu8#

如果你使用Intellij Idea,那么你应该这样做:

路径中不需要static。应使用@{/images/logo.png},因为在您的情况下,默认解析程序会将/src/main/resources/static/Map到/ url。

我用这个解决了这个问题。我找到解决方案https://copyprogramming.com/howto/image-does-not-show-using-thymeleaf-and-spring的网站

相关问题