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

服务类

  • 系统盘符: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 异常
  • 文件权限异常
  • 访问一定要访问具体文件,不要访问到文件夹
相关推荐
只会copy的搬运工3 分钟前
Jenkins 持续集成部署——Jenkins实战与运维(1)
运维·ci/cd·jenkins
娶不到胡一菲的汪大东18 分钟前
Ubuntu概述
linux·运维·ubuntu
阿里嘎多学长28 分钟前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_31 分钟前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
云云32141 分钟前
怎么通过亚矩阵云手机实现营销?
大数据·服务器·安全·智能手机·矩阵
灯火不休➴1 小时前
[Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
linux·运维·服务器
小峰编程1 小时前
独一无二,万字详谈——Linux之文件管理
linux·运维·服务器·云原生·云计算·ai原生
卜及中1 小时前
【Linux】资源隔离机制 — 命名空间(Namespace)详解
linux·服务器·php
明 庭1 小时前
Ubuntu下通过Docker部署Caddy服务器
服务器·ubuntu·docker
MuLogin_Browser1 小时前
如何保障多个Facebook账号稳定运行:一账号一稳定IP?
服务器·tcp/ip·facebook