我正在尝试构建一个应用程序(使用 Spring boot)来生成文件(.js 文件),这些文件必须是公开可用的。 这些文件(创建后)应该可以通过我的服务器上的链接访问,并且可以插入其他人的网站(带有链接)。 类似于“jQuery”或“Google Adwords”的工作方式(它们如何与 html 脚本标签连接)。 因此,我面临的问题(或者只是缺乏知识)是如何动态创建这些文件并使它们可供公开访问。
一般的想法是:1 个用户有 1 个文件夹(例如在 resources/files 文件夹内)(我们将其命名为folder1232)。在这个文件夹中,生成了特定的 js 文件(例如 111.js)。所以我希望他能够通过请求 app.com/files/folder1232/111.js URL 来访问他的文件。将会采取怎样的方式呢? 如果有不清楚的地方,请告诉我。
我目前正在使用资源文件夹来了解它的一般工作原理。我看到的是文件在启动时以某种方式映射(例如,如果我在运行时创建一个包含文件的新文件夹,则在重新启动应用程序之前无法访问它)。 我也尝试过使用 WebMvcConfigurer,但我认为我缺少一些基本的东西。
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/files/**")
.addResourceLocations("file:/files/")
.setCachePeriod(3600)
.resourceChain(true)
.addResolver(new PathResourceResolver());
}
}
我希望从浏览器访问新创建的文件(在运行时)。 如果我也能够访问新创建的文件夹(在运行时),那就太完美了。 但是 atm 我必须重新启动应用程序才能访问新创建的文件和文件夹。
更新: 接下来我尝试做的是在我的 java 项目之外创建一个文件夹。 像这样:/Users/%用户名%/Documents/fileFold 并将我的 addResourceHandler 函数更改为:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/files/**")
.addResourceLocations("file:/Users/%username%/Documents/fileFold/")
.setCachePeriod(0)
.resourceChain(true)
.addResolver(new PathResourceResolver());
}
现在一切正常了。感谢大家! 注意:不要忘记 addResourceLocations 函数中的最后一个斜杠,没有它映射将无法工作(至少对我不起作用)。
最佳答案
首先, 了解您实际试图解决的问题。 不要只是跳到“我想要这个解决方案”。
您试图解决的问题似乎是这样的:
- 我的应用程序将“创建”一些副本(副本是文本的通用术语,其中包括您的 .js 文件)。
- 该副本将可通过一些唯一标识符公开寻址。
上述要求都不要求您在任何地方创建文件。
一个简单的解决方案是: 在下面的解决方案中,“行”可以是一行,也可以是 1 行或多行的有序集合。
- 在表中创建一行,其中包含要提供的“副本”。
- 使用唯一值来标识行。
- [可选] 创建一个表,以在行的人类可读名称(也称为文件名)和该行的唯一标识符之间进行转换。
- 创建 REST 服务以按人类可读的名称提取行。
关于java - 如何使用 Java spring 提供动态创建的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428855/