Search code examples
micronaut

How to specify a path for static files on windows?


I'm trying to serve files from a folder on my drive D:\Dev\files but when I specify it in the configuration file application.yml I get an error.

micronaut:
  application:
    name: devchallenges
  server:
    port: 5000
    cors:
      enable: true
  router:
    static-resources:
      swagger:
        paths: classpath:META-INF/swagger
        mapping: /swagger/**
      documentation:
        paths: classpath:META-INF/swagger/views/rapidoc
        mapping: /documentation/**
      files:
        paths: files:D:/Dev/files
        mapping: /files/**
Message: Unrecognizable resource path: files:D:/Dev/files
Path Taken: new NettyHttpServer(NettyHttpServerConfiguration serverConfiguration,ApplicationContext applicationContext,Router router,RequestArgumentSatisfier requestArgumentSatisfier,MediaTypeCodecRegistry mediaTypeCodecRegistry,NettyCustomizableResponseTypeHandlerRegistry customizableResponseTypeHandlerRegistry,[StaticResourceResolver resourceResolver],BeanProvider ioExecutor,ThreadFactory threadFactory,ExecutorSelector executorSelector,ServerSslBuilder serverSslBuilder,List outboundHandlers,EventLoopGroupFactory eventLoopGroupFactory,EventLoopGroupRegistry eventLoopGroupRegistry,HttpCompressionStrategy httpCompressionStrategy,HttpContentProcessorResolver httpContentProcessorResolver,ChannelOptionFactory channelOptionFactory,ErrorResponseProcessor errorResponseProcessor,HttpHostResolver hostResolver)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2006)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2768)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2754)
        at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2425)
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2399)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1264)
        at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:1014)
        at io.micronaut.http.server.netty.$NettyHttpServerDefinition.build(Unknown Source)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1979)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2768)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2754)
        at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:2425)
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:2399)
        at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1285)
        at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:755)
        at io.micronaut.context.BeanLocator.findBean(BeanLocator.java:149)
        at io.micronaut.runtime.Micronaut.start(Micronaut.java:73)
        at io.micronaut.runtime.Micronaut.run(Micronaut.java:311)
        at io.micronaut.runtime.Micronaut.run(Micronaut.java:297)
        at com.back.Application.main(Application.java:16)
Caused by: io.micronaut.context.exceptions.ConfigurationException: Unrecognizable resource path: files:D:/Dev/files
        at io.micronaut.web.router.resource.StaticResourceConfiguration.getResourceLoaders(StaticResourceConfiguration.java:98)
        at io.micronaut.web.router.resource.StaticResourceResolver.<init>(StaticResourceResolver.java:54)
        at io.micronaut.web.router.resource.$StaticResourceResolverDefinition.build(Unknown Source)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1979)
        ... 19 common frames omitted

I tried to place the route in different ways but it did not work


Solution

  • Simply go with a complaint and valid URL.

    file:///D:/Dev/files
    

    file:// is the protocol referring to your disk. The third / represents the root of your filesystem (in unix thinking). The rest is simply your Windows path but with / instead of \.

    micronaut:
      router:
        static-resources:      
          files:
            paths: file:///D:/Dev/files
            mapping: /files/**