栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot设置文件上传

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot设置文件上传

一 先搭建一个包含web的springboot项目,后面附上源码。


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.5
         
    
    com.zhao
    demoFile
    0.1
    war
    demo
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-tomcat
            provided
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
            
                org.apache.maven.plugins
                maven-resources-plugin
                3.1.0
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



二 然后写一个工具类,用来上传文件。
package com.zhao.demo.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


@Component
public class FileUtil {
    
    public  Object uploadImage(MultipartFile file, HttpServletRequest request) {
        
        String realPath = "/space/projects_pro/uploadFile/fileImages/";
        
        String  projectName="demoFile-0.1";
        
        Date date=new java.sql.Date(System.currentTimeMillis());
        File dir = new File(realPath+"/"+date);
        if (!dir.isDirectory()) {//文件目录不存在,就创建一个
            dir.mkdirs();
        }
        String filename = file.getOriginalFilename();
        
        String suffix= filename.substring(filename.lastIndexOf("."));
        
        String newName= UUID.randomUUID().toString().replace("-", "")+suffix;
        File fileServer = new File(dir, newName);
        System.out.println("file文件真实路径:" + fileServer.getAbsolutePath());
        //2,实现上传
        try{
            file.transferTo(fileServer);
        }catch (IOException e){
            e.printStackTrace();
        }
        String filePath = request.getScheme()+"://" +
                request.getServerName() + ":"
                + request.getServerPort()+"/"+projectName
                + "/uploadFile/fileImages/" + date +"/"+ newName;
        //3,返回可供访问的网络路径
        Map map=new HashMap();
        map.put("file文件真实路径",fileServer.getAbsolutePath());
        map.put("返回可供访问的网络路径",filePath);
        return map;
    }
}

三 配置文件上传的文件大小限制
# 上传文件总的最大值 默认10MB
spring.servlet.multipart.max-request-size=500MB
#单个文件最大值 默认10MB
spring.servlet.multipart.max-file-size=100MB
四 写一个配置类,配置访问的网络路径。
package com.zhao.demo.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlbasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
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 java.util.ArrayList;
import java.util.List;


@Configuration
public class MyInterceptorConfig extends WebMvcConfigurationSupport {

    private String realPath="/space/projects_pro/uploadFile/";


    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        super.addInterceptors(registry);
    }

    

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {

        // addResourceHandler是指你想在url请求的路径
        // addResourceLocations是图片存放的真实路径
        //设置映射规则,原路径(ResourceLocations)被设置成可以通过映射路径(ip:port/images)来访问,可以设置多个
        registry.addResourceHandler("/uploadFile
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("
    private CorsConfiguration addcorsConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        List list = new ArrayList<>();
        list.add("*");
        corsConfiguration.setAllowedOrigins(list);
    
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }

    
    @Bean
    public CorsFilter corsFilter() {
        UrlbasedCorsConfigurationSource source = new UrlbasedCorsConfigurationSource();
        source.registerCorsConfiguration("
@Controller
public class FileController {
    @Autowired
    private FileUtil fileUtil;

    //produces="application/json;charset=utf-8",设置返回的编码格式
    @RequestMapping(value = "/file",produces="application/json;charset=utf-8")
    @ResponseBody
    //@RequestParam(value = "file") 接收单个参数
    public Object file(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request){
        return fileUtil.uploadImage(file,request);
    }

    @RequestMapping(value = "/show",produces="application/json;charset=utf-8" )
    @ResponseBody()
    public String show(){
        return "测试接口";
    }
}

常见问题。 一 上传文件出现的问题。
org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
	at org.apache.tomcat.util.http.fileupload.impl.FileItemStreamImpl$1.raiseError(FileItemStreamImpl.java:117) ~[tomcat-embed-core-9.0.53.jar:9.0.53]
	at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76) ~[tomcat-embed-core-9.0.53.jar:9.0.53]
	at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135) ~[tomcat-embed-core-9.0.53.jar:9.0.53]
	at java.io.FilterInputStream.read(FilterInputStream.java:107) ~[na:1.8.0_275]
	at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:97) ~[tomcat-embed-core-9.0.53.jar:9.0.53]
解决方案。

出现这个问题,那是因为你上传的文件太大了,默认上传文件的大小是10MB,去配置文件配置一下上传的文件大小就可以了。

# 上传文件总的最大值 默认10MB
spring.servlet.multipart.max-request-size=500MB
#单个文件最大值 默认10MB
spring.servlet.multipart.max-file-size=100MB
二 打包出现的问题。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project demoFile: Input length = 1 -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Process finished with exit code 1

解决方案。

打包出现问题了,在pom.xml中增加一个包,加在plugins里面。

            
                org.apache.maven.plugins
                maven-resources-plugin
                3.1.0
            

通过Postman调用接口,上传文件。

拿到返回的网络路径直接到浏览器访问即可。

不想敲那就复制,附上源码:赵海辉/demo - 码云 - 开源中国 (gitee.com)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/324791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号