Micronaut:使资源文件内部的文件公开可用

huangapple go评论90阅读模式
英文:

Micronaut: Make files inside resources publicly available

问题

以下是翻译好的内容:

我有一个小的 Micronaut 应用程序,我需要在 resources 内提供文件。这些文件应该是公开可访问的,因此如果我输入该文件的 URL,它会在浏览器中直接打开(它们是小图片)。

我尝试使用以下配置:

  1. micronaut:
  2. application:
  3. name: myapp
  4. router:
  5. static-resources:
  6. enabled: true
  7. paths: classpath:data
  8. mapping: "/**"

但是响应始终是相同的:

  1. {
  2. "message": "Page Not Found",
  3. "_links": {
  4. "self": {
  5. "href": "/data/per.svg",
  6. "templated": false
  7. }
  8. }
  9. }

我需要哪些额外的配置?

英文:

I have a small micronaut application where I need to serve files inside resources. Those files should be publicly accessible, so if I enter the url for that file, it would open directly in the browser (they are small images).

I tried using

  1. micronaut:
  2. application:
  3. name: myapp
  4. router.static-resources:
  5. enabled: true
  6. paths: classpath:data
  7. mapping: "/**"

but the response is always the same:

  1. {
  2. "message": "Page Not Found",
  3. "_links": {
  4. "self": {
  5. "href": "/data/per.svg",
  6. "templated": false
  7. }
  8. }
  9. }

What additional configuration do I need?

答案1

得分: 6

你的配置中存在两个问题:

  1. 你使用了micronaut.router.static-resources.enabled,但应该使用micronaut.router.static-resources.default.enabled。所以缺少了default部分。
  2. 你正在将存储在类路径下的data目录中的静态资源映射到根目录*/的 web 路径。因此,你可以通过http://localhost:8080/per.svg访问该per.svg*文件。

但最好使用与根路径不同的单独上下文,以避免与控制器路径冲突。因此,你可以将其映射到static,例如:

  1. micronaut:
  2. application:
  3. name: myapp
  4. router:
  5. static-resources:
  6. default:
  7. enabled: true
  8. mapping: "/static/**"
  9. paths: classpath:data

然后你可以通过http://localhost:8080/static/per.svg来访问它。

英文:

There are two issues in your configuration:

  1. You have micronaut.router.static-resources.enabled but it should be micronaut.router.static-resources.default.enabled. So the default is missing.
  2. You are mapping your static resources stored in the data directory in the class path to root / web path. So you can access that per.svg file on http://localhost:8080/per.svg.

But it is better to use separate context then root to prevent conflict with controller paths. So, you can map it to static for example:

  1. micronaut:
  2. application:
  3. name: myapp
  4. router:
  5. static-resources:
  6. default:
  7. enabled: true
  8. mapping: "/static/**"
  9. paths: classpath:data

Then you can access it on http://localhost:8080/static/per.svg

huangapple
  • 本文由 发表于 2020年10月1日 09:19:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/64147833.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定