一、基于yml 或者properties配置文件

上传的文件存放在某盘某目录下,如 E:/Practices/test

具体配置:

web:

  upload-path: E:/Practices/test

  front-path: E:/Practices

spring:

  resources:

    static-locations: file:${web.upload-path},file:${web.front-path}

访问方式:IP+端口/文件名

现在:http://localhost:8003/1442823076292.jpeg

注:不需要配置什么加载配置类,上传的文件到 E:/Practices/test。文件显示如上访问。

二、基于springboot配置类,改变原来的默认配置

此处不在赘述上传过程,简单描述它的上传思路:

上传的文件存放在某盘某目录下,如 E:/视频制作/图片/

通过配置文件类 WebMvcConfig 将本地存放文件目录映射到项目路径下,具体查看配置类

项目启动,加载配置类。

配置类如下:

@Configuration

public class WebMvcConfig extends WebMvcConfigurationSupport {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

String path = "E:\\Practices\\";//"/tools/images/";//"E:/视频制作/图片/";

// 上传路径映射 会使spring boot的自动配置失效

registry.addResourceHandler("/image/**").addResourceLocations("file:" + path);

super.addResourceHandlers(registry);

}

}

意思:

项目访问image路径会直接访问path路径下的文件

访问方式:

原来:file:///E:/%E8%A7%86%E9%A2%91%E5%88%B6%E4%BD%9C/%E5%9B%BE%E7%89%87/1442823076292.jpeg

现在:

http://localhost:9001/image/1442823076292.jpeg

http://localhost:9001/image/one/1442823076292.jpeg

三、基于绝对路径访问

简单思路:

获取resources下的某目录,如static文件夹。获取方式如下:

File staticFilePath = ResourceUtils.getFile("classpath:static");

根据获得的路径,创建新的路径,并上传文件。详情查看AbsolutePathController的方法uploadToProject

基于默认配置,则不需要加配置类。

若加了配置类,改变原来的路径情况,需要补上:

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");

super.addResourceHandlers(registry);

}

 

对比解析:上传的文件到项目的resources目录下,实际加载得到的文件是绝对路径下的文件如image/1442823076292.jpeg,主要的原理还是文件映射。访问的时候,直接http://localhost:9001/images/1442823076292.jpeg

注:不适用jar包形式启动的项目,楼主暂时没有找到好的方案,有好的方案,麻烦多多分享,谢谢。可以本地调试玩耍。生产上,建议使用外部路径

四、基于Nginx配置的访问

简单思路:

上传文件到某路径下,如C:/文件

使用Nginx服务器,配置访问路径并映射到文件上传的路径下

以下是Nginx的配置

基于alias配置

location /static/ {

   alias /var/www/static/;

}

alas会把指定路径当作文件路径

注意:alias指定的目录后面必须要加上"/",即/var/www/static/不能改成/var/www/static 访问http://IP:PORT/static/index.html时,实际访问的是/var/www/static/index.html 这种实现,类似 基于springboot配置类

基于配置root

location /static/ {

  root /var/www/;

}

root会把指定路径拼接到文件路径后,再进行访问

注意:location中指定的/static/必须是在root指定的/var/www/目录中真实存在的。 通过浏览器访问http://127.0.0.1:7001/static/t.txt,则访问服务器的文件是/var/www/static/t.txt

 

项目例子:

https://github.com/krycai/gc-framework/tree/master/gc-upload

 

讲解比较详细的例子:https://www.javatt.com/p/11507