近期项目遇到需求,需要后端从文件服务器下载文件,解密后放置在静态路径下,供前端调用查看。
首先想到的解决方法是将文件放置在static路径下,启动热部署功能,但是由于该操作访问频率很高,热部署对性能影响极大随即放弃。
想到的第二个方法是使用nginx进行路由转发,将文件夹与项目分离,nginx处进行访问的控制,这个方法可以解决目前的需求(但是作为一个java码农,不能总是依靠nginx进行操作,Spring也是集成了tomcat的)。
所以有了第三个方法,也是最合理的方法。在config中配置FileConfig,对访问路径进行解析,添加资源路径。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.File;
@Configuration
public class FileConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String dirPath = System.getProperty("user.dir") + File.separator + "filePath";
registry.addResourceHandler("/path/**").addResourceLocations("file:" + dirPath+"/");
}
}
代码中dirPath为本地路径,使用了项目的相对路径,filePath为保存文件的文件夹,path为访问时URL中的字段。
添加好config配置就可以使用/path/fileName来访问后端的文件了。