如何使用angular和Spring MVC提供静态图像?

时间:2018-01-16 12:47:09

标签: angular spring-boot

现在我创建了文件上传组件,并将上传的文件保存在硬盘中的物理路径中。那么,现在如何使用这个相对路径,当我想要以新的标签打开图像时,我想以角度提供这个图像,右键单击它应该转换为localhost / port-number / image-path?

在应用程序属性中使用配置我尝试在配置中使用外部URL,但我不知道在此URL中应该设置什么我需要做什么更改来提供图像。

2 个答案:

答案 0 :(得分:0)

如果硬盘路径位于Web服务器的文档根目录内,则可以使用相对于文档根目录的URL直接访问它。

实施例: 硬盘中的文档根目录为/var/www/examplesite,您已将文件theimage.jpg上传到/var/www/examplesite/uploads,然后以http://example.com/uploads/theimage.jpg

的形式访问该图像

如果您已将文件上传到文档根目录之外,那么您需要实现一种机制来从其位置读取文件并从应用程序服务器或servlet容器中提供它。

查看本教程,它将向您展示如何使用Spring MVC将请求转发到WEB-INF文件夹中的资源。

Returning Image/Media Data with Spring MVC by baeldung

答案 1 :(得分:0)

Spring Content旨在做到这一点。使用Spring Content FS(即文件系统的Spring Content),您可以通过定义单个界面来创建支持对内容进行CRUD操作的REST服务。

为此,请将以下Spring Content依赖项添加到项目中(假设为maven): -

<dependencies>
    <!-- Standard Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.3</version>
    </dependency>

    <!-- Spring Content -->
    <dependency>
        <groupId>com.github.paulcwarren</groupId>
        <artifactId>spring-content-fs-boot-starter</artifactId>
        <version>0.0.9</version>
    </dependency>
    <dependency>
        <groupId>com.github.paulcwarren</groupId>
        <artifactId>spring-content-rest-boot-starter</artifactId>
        <version>0.0.9</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

在Spring Boot Application类中,创建一个ImageStore。这指示Spring Content为此接口注入REST服务,使您不必自己编写任何此代码(包括上载代码): -

    @SpringBootApplication 
    public class DemoApplication {

        public static void main(String[] args) {        
           SpringApplication.run(DemoApplication.class, args);  
        }

        @StoreRestResource(path="images")   
        public interface ImageStore extends Store<String> {} 
    }

注意:此服务也支持视频流!

请注意,默认情况下,Spring Content FS会在java.io.tmpdir下创建一个商店上传的图像,每次启动应用程序时都会获得一个新的root。因此,您还需要设置SPRING_CONTENT_FS_FILESYSTEM_ROOT环境变量,以便为应用程序提供稳定的图像根“。

完成此操作后,您将能够使用任意路径POST(创建),GET(读取),PUT(更新)和删除(删除)到URI“/ images”,如下所示: -

  

/images/some/path/myimage.jpeg

例如,对此URL的POST会将图像存储到SPRING_CONTENT_FS_FILESYSTEM_ROOT / some / path / myimage.jpeg。 GET将再次检索它,依此类推。