SpringBoot上传文件以及映射网络路径

一、前言:

我这里的路径映射是指:将本地文件路径映射成网络URL地址,即通过URL可以访问到本地文件。

之前文件上传之后,是在tomcat上来配置路径映射,但最近用的springboot,直接用

nohup java -jar xxxx.jar &

启动项目。貌似就无法在tomcat上配置了(可能可以通过配置tomcat插件来进行配置,不过我没试过)。

环境:jdk1.8,springboot2.1.1

二、springboot上传文件

文件上传:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping()
public class FileController {
    /**
     * 文件上传
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "fileUpload")
    public List fileUpload(HttpServletRequest request) {

        List files = ((MultipartHttpServletRequest) request).getFiles("file");
        if (files == null || files.size() == 0) {
            // TODO
        }
        // 返回值
        List urlList = new ArrayList<>();

        // 文件实际存放路径
        String filePath = AppConstant.FILE_PATH;

        for (int i = 0; i < files.size(); i++) {
            MultipartFile file = files.get(i);
            if (file.isEmpty()) {
                // TODO
            }
            // 获取上传时的文件名
            String originalFilename = file.getOriginalFilename();
            // 获取文件大小,单位:b
            long fileSize = file.getSize();

            // 获取文件后缀名 .XX
            int suffixIndex = originalFilename.lastIndexOf(".");
            String fileSuffix = originalFilename.substring(suffixIndex);
            // TODO 新文件名
            String newFileName = "新文件名" + fileSuffix;
            // 生成网络访问地址
            String fileUrl = AppConstant.FILE_URL + newFileName;
            // 生成新文件路径
            File dest = new File(filePath + newFileName);
            try {
                file.transferTo(dest);

                urlList.add(fileUrl);
            } catch (IOException e) {
                e.printStackTrace();
                // TODO
            }
        }

        return urlList;
    }
}

三、springboot配置

由于我用的是springboot2.1.1的,所以我这里是继承了WebMvcConfigurationSupport这个类。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

    /**
     * 资源映射配置
     *
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(AppConstant.FILE_MAP)
                .addResourceLocations("file:" + AppConstant.FILE_PATH);
        
        super.addResourceHandlers(registry);
    }
}

四、静态变量

public class AppConstant {
     // 这里的files和下面FILE_MAP的files要一致
    public final static String FILE_URL = "http://localhost/app/files/";
    public final static String FILE_MAP = "/files/**"; 
    public final static String FILE_PATH = "D:/upload/";
}

比如你上传了hello.jpg图片,通过http://localhost/app/files/hello.jpg访问到图片。

同理,也可以照此部署html,js等文件。

这样就可以让静态文件和自身项目进行分离,这样部署项目会方便很多

 

你可能感兴趣的:(spring相关)