将图片资源保存到服务器的盘符中

服务类

  • 系统盘符:file-path.disk(可能会变,配置配置文件dev中)
  • 文件根路径:file-path.root-path(可能会变,配置配置文件dev中)
  • http协议的Nginx的映射前缀:PrefixConstant.HTTP_PREFIX
java 复制代码
package com.sky.service;

import com.sky.constant.MessageConstant;
import com.sky.constant.PrefixConstant;
import com.sky.exception.BaseException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Service
public class CommonService {

    @Value("${file-path.disk}")
    private String disk;

    @Value("${file-path.root-path}")
    private String rootPath;


    /**
     * 文件上传
     *
     * @param parentPath 父路径
     * @param file       文件
     */

    public String upload(String parentPath, MultipartFile file) {
        // Upload file
        String fileName = file.getOriginalFilename();
        // Get full path using system file separator
        String fullPath = disk + ":" + File.separator + rootPath + File.separator + parentPath;
        // Create the directory if it doesn't exist
        File directory = new File(fullPath);
        if (!directory.exists()) {
            directory.mkdirs();
        }
        // Create the destination file
        File dest = new File(directory, fileName);
        try {
            file.transferTo(dest);
        } catch (IOException e) {
            throw new BaseException(MessageConstant.UPLOAD_FAILED);
        }
        // Return the file access URL
        return PrefixConstant.HTTP_PREFIX +
               fileName;
    }
}

配置文件

总配置文件

yml 复制代码
sky:
  jwt:
    # 设置jwt签名加密时使用的秘钥
    admin-secret-key: itcast
    # 设置jwt过期时间
    admin-ttl: 720000000
    # 设置前端传递过来的令牌名称
    admin-token-name: token
  file-path:
    disk: ${file-path.disk}
    root-path: ${file-path.root-path}

开发环境配置文件

yml 复制代码
file-path:
  disk: D
  root-path: sky_take_out

常量类

文件路径常量

java 复制代码
package com.sky.constant;

public class SystemPathConstant {
   public static final String COMMON = "common";


    // 构造函数私有化
     private SystemPathConstant() {
     }
}

nginx路径映射常量

java 复制代码
package com.sky.constant;

public class PrefixConstant {

   public static final String HTTP_PREFIX = "http://localhost/files/";


   // 构造函数私有化
    private PrefixConstant() {
    }
}

controller层

别人上传完图片之后把访问路径给别人(http的路径,不是本地路径)

java 复制代码
    @PostMapping("/upload")
    @ApiOperation("文件上传")
    public Result<String> upload(MultipartFile file) {
        log.info("文件上传:{}", file);
        // 将文件上传到本地文件夹下
        // 返回文件的访问路径
        String filePath = commonService.upload(SystemPathConstant.COMMON,file);
        return Result.success(filePath);
    }

配置类放行静态资源

java 复制代码
package com.sky.config;

import com.sky.constant.SystemPathConstant;
import com.sky.interceptor.JwtTokenAdminInterceptor;
import com.sky.json.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.List;

/**
 * 配置类,注册web层相关组件
 */
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {

    @Autowired
    private JwtTokenAdminInterceptor jwtTokenAdminInterceptor;

    @Value("${file-path.disk}")
    private String disk;

    @Value("${file-path.root-path}")
    private String rootPath;


   ..... 其他配置一万行
    /**
     * 设置静态资源映射
     * @param registry
     */
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        // Map the file directory to a URL path
        registry.addResourceHandler("/files/**")
                .addResourceLocations("file:" +
                        disk + ":" + "/" +
                        rootPath + "/" +
                        SystemPathConstant.COMMON + "/");

    }


}

nginx映射

静态资源到本地盘符(这就你的代码中配置的判读)

  • 这个文件是开发环境的,正式环境按照正式环境的路径和盘符配置
    改完记得重启一下
js 复制代码
       location /files/ {
            alias D:/sky_take_out/common/;
        }
  • 有的时候会访问403 异常
  • 文件权限异常
  • 访问一定要访问具体文件,不要访问到文件夹
相关推荐
kkce32 分钟前
快快科技 MTR 路由检测全面支持 IPv6,多节点覆盖赋能全协议网络诊断
服务器·网络·科技
qq_401700412 小时前
Linux磁盘配置与管理
linux·运维·服务器
恒创科技HK2 小时前
香港大带宽服务器能降低ping值吗 ?
运维·服务器
爱代码的小黄人2 小时前
华硕主板BIOS设置台式机电脑“Restore AC Power Loss”(断电后恢复状态)设置
运维·服务器·电脑
打码人的日常分享2 小时前
基于信创体系政务服务信息化建设方案(PPT)
大数据·服务器·人工智能·信息可视化·架构·政务
G31135422733 小时前
判断 IP 地址纯净度
服务器·网络
中电金信3 小时前
云原生时代,应用运维模式如何破局?
运维·云原生
北京盛世宏博3 小时前
如何利用技术手段来甄选一套档案馆库房安全温湿度监控系统
服务器·网络·人工智能·选择·档案温湿度
ringking1233 小时前
docker源文件配置以及密钥文件
运维·docker·容器
Code Warrior3 小时前
【Linux】传输层协议UDP
linux·运维·udp