spring文件上传大小限制(spring上传到文件服务器)

零、本篇要点 介绍SpringBoot对文件上传的自动配置。介绍MultipartFile接口。介绍SpringBoot+Thymeleaf文件上传demo的整合。介绍对文件类型,文件名长度等判断方法。 一、SpringBoot对文件处理相关自动配置 自动配置是SpringBoot为我们提供的便利之一,开发者可以在不作任何配置的情况下,使用SpringBoot提供的默认设置,如处理文件需要的Mul…

零、这篇关键点

  • 详细介绍SpringBoot对文件上传的自动配置。
  • 介绍MultipartFile接口。
  • 详细介绍SpringBoot Thymeleaf文件上传demo的融合。
  • 详细介绍对文件属性,文件名长度等分辨方式。

一、SpringBoot对文档解决有关自动配置

自动配置是SpringBoot为大家提供的便捷之一,开发人员可以在没有作一切配置的情形下,应用SpringBoot提供的默认设定,如解决文档必须的MultipartResolver。

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class })
@ConditionalOnProperty(prefix = \"spring.servlet.multipart\", name = \"enabled\", matchIfMissing = true)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {

	private final MultipartProperties multipartProperties;

	public MultipartAutoConfiguration(MultipartProperties multipartProperties) {
		this.multipartProperties = multipartProperties;
	}

	@Bean
	@ConditionalOnMissingBean({ MultipartConfigElement.class, CommonsMultipartResolver.class })
	public MultipartConfigElement multipartConfigElement() {
		return this.multipartProperties.createMultipartConfig();
	}

	@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
	@ConditionalOnMissingBean(MultipartResolver.class)
	public StandardServletMultipartResolver multipartResolver() {
		StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
		multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
		return multipartResolver;
	}

}
  • Spring3.1以后适用StandardServletMultipartResolver,且默认应用StandardServletMultipartResolver,它的优势取决于:应用Servlet所提供的作用适用,不用依靠一切其它的新项目。
  • 要想自动配置起效,必须配置spring.servlet.multipart.enabled=true,自然这一配置默认便是true。
  • 有关的配置设定在MultipartProperties中,在其中字段名便是相应的特性设定,經典字段名有:enabled:是不是打开文件上传自动配置,默认开启。location:文件上传的临时性文件目录。maxFileSize:较大图片大小,以字符为企业,默认为1M。maxRequestSize:全部要求的最高容积,默认为10M。fileSizeThreshold:图片大小做到该阀值,将载入临时性文件目录,默认为0,即全部材料都是会立即载入硬盘临时文件夹中。resolveLazily:是不是可塑性解决要求,默认为false。
  • 大家还可以自定解决的关键点,必须完成MultipartResolver接口。

二、解决文件上传MultipartFile接口

SpringBoot为大家提供了MultipartFile强劲接口,使我们可以获得文件上传的详细资料,如初始文件夹名称,內容种类这些,接口內容如下所示:

public interface MultipartFile extends InputStreamSource {
    String getName(); //获得主要参数名
    @Nullable
    String getOriginalFilename();//初始的文件夹名称
    @Nullable
    String getContentType();//內容种类
    boolean isEmpty();
    long getSize(); //尺寸
    byte[] getBytes() throws IOException;// 获得字节数二维数组
    InputStream getInputStream() throws IOException;//以流方法实现载入
    default Resource getResource() {
        return new MultipartFileResource(this);
    }
    // 将提交的文档载入系统文件
    void transferTo(File var1) throws IOException, IllegalStateException;
	// 载入特定path
    default void transferTo(Path dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));
    }
}

三、SpringBoot Thymeleaf融合demo

1、撰写控制板

/**
 * 文件上传
 *
 * @author Summerday
 */
@Controller
public class FileUploadController {

    private static final String UPLOADED_FOLDER = System.getProperty(\"user.dir\");

    @GetMapping(\"/\")
    public String index() {
        return \"file\";
    }

    @PostMapping(\"/upload\")
    public String singleFileUpload(@RequestParam(\"file\") MultipartFile file,
                                   RedirectAttributes redirectAttributes) throws IOException {

        if (file.isEmpty()) {
            redirectAttributes.addFlashAttribute(\"msg\", \"文档为空,请选择你的文件上传\");
            return \"redirect:uploadStatus\";

        }
        saveFile(file);
        redirectAttributes.addFlashAttribute(\"msg\", \"文件上传\"   file.getOriginalFilename()   \"取得成功\");
        redirectAttributes.addFlashAttribute(\"url\", \"/upload/\"   file.getOriginalFilename());
        return \"redirect:uploadStatus\";
    }

    private void saveFile(MultipartFile file) throws IOException {
        Path path = Paths.get(UPLOADED_FOLDER   \"/\"   file.getOriginalFilename());
        file.transferTo(path);
    }

    @GetMapping(\"/uploadStatus\")
    public String uploadStatus() {
        return \"uploadStatus\";
    }
}

2、撰写网页页面file.html

<html xmlns:th=\"http://www.thymeleaf.org\">
    <!--suppress ALL-->
<html lang=\"en\">
    <head>
        <meta charset=\"UTF-8\">
        <title>文件上传页面</title>
    </head>
    <body>
        <div>
            <form method=\"POST\" enctype=\"multipart/form-data\" action=\"/upload\">
                <table>
                    <tr><td><input type=\"file\" name=\"file\" /></td></tr>
                    <tr><td></td><td><input type=\"submit\" value=\"提交\" /></td></tr>
                </table>
            </form>

        </div>
    </body>
</html>

3、撰写网页页面uploadStatus.html

<!--suppress ALL-->
<html xmlns:th=\"http://www.thymeleaf.org\">

<html lang=\"en\">
    <head>
        <meta charset=\"UTF-8\">
        <title>上传文件页面</title>
    </head>
    <body>
        <div th:if=\"${msg}\">
            <h2 th:text=\"${msg}\"/>
        </div>
        <div >
            <img src=\"\" th:src=\"${url}\" alt=\"\">
        </div>
    </body>
</html>

4、撰写配备

server.port=8081
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

5、配置虚似途径投射

这一步是十分关键的,大家将文件传送到网络服务器处时,大家必须将人们的要求途径和云服务器上的途径开展相匹配,要不然极有可能上传文件取得成功,但浏览不成功:

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    private static final String UPLOADED_FOLDER = System.getProperty(\"user.dir\");

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(\"/upload/**\")
                .addResourceLocations(\"file:///\"   UPLOADED_FOLDER   \"/\");
    }
}

对应关系必须自已去界定,假如浏览不成功,可以尝试打印出下列途径,看一下是不是缺少了途径分隔符。

留意:如果addResourceHandler不必写出解决/**,那样会阻拦掉别的的要求

6、检测网页页面

实行mvn spring-boot:run,运行程序流程,浏览http://localhost:8081/,选择文件,点一下提交按键,大家的新项目文件目录下产生了mongo.jpg,而且网页页面也取得成功表明:

利用SpirngBoot实现文件上传功能

四、SpringBoot的Restful设计风格,回到url

/**
 * 上传文件
 *
 * @author Summerday
 */
@RestController
public class FileUploadRestController {

    /**
     * 文件名长度
     */
    private static final int DEFAULT_FILE_NAME_LENGTH = 100;

    /**
     * 容许的文件属性
     */
    private static final String[] ALLOWED_EXTENSIONS = {
            \"jpg\", \"img\", \"png\", \"gif\"
    };

    /**
     * 新项目途径
     */
    private static final String UPLOADED_FOLDER = System.getProperty(\"user.dir\");

    @PostMapping(\"/restUpload\")
    public Map<String,Object> singleFileUpload(@RequestParam(\"file\") MultipartFile file) throws Exception {

        if (file.isEmpty()) {
            throw new Exception(\"文档为空!\");
        }
        String filename = upload(file);
        String url = \"/upload/\"   filename;
        Map<String,Object> map = new HashMap<>(2);
        map.put(\"msg\",\"提交取得成功\");
        map.put(\"url\",url);
        return map;
    }


    /**
     * 提交方式
     */
    private String upload(MultipartFile file) throws Exception {
        int len = file.getOriginalFilename().length();
        if (len > DEFAULT_FILE_NAME_LENGTH) {
            throw new Exception(\"文件夹名称超过限定!\");
        }
        String extension = getExtension(file);
        if(!isValidExtension(extension)){
            throw new Exception(\"格式文件有误\");
        }
        // 自定文件夹名称
        String filename = getPathName(file);
        // 获得file目标
        File desc = getFile(filename);
        // 载入file
        file.transferTo(desc);
        return filename;
    }

    /**
     * 获得file目标
     */
    private File getFile(String filename) throws IOException {
        File file = new File(UPLOADED_FOLDER   \"/\"   filename);
        if(!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
        if(!file.exists()){
            file.createNewFile();
        }
        return file;
    }

    /**
     * 认证文件属性是不是恰当
     */
    private boolean isValidExtension(String extension) {
        for (String allowedExtension : ALLOWED_EXTENSIONS) {
            if(extension.equalsIgnoreCase(allowedExtension)){
                return true;
            }
        }
        return false;
    }

    /**
     * 这里自定文件夹名称,uuid   extension
     */
    private String getPathName(MultipartFile file) {
        String extension = getExtension(file);
        return UUID.randomUUID().toString()   \".\"   extension;
    }

    /**
     * 获得后缀名
     */
    private String getExtension(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        return originalFilename.substring(originalFilename.lastIndexOf(\'.\')   1);
    }
}



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月7日 下午3:57
下一篇 2022年5月7日 下午3:59

相关推荐

  • 迪奥999真假对比(7招教你辨别真假)

    迪奥是我们生活中熟知的一个大品牌,旗下的彩妆十分受欢迎,其中迪奥999口红受到很多人青睐。接下来我们一起来看看迪奥999口红怎么辨别真假。 迪奥999口红真假辨别 真品摸上去比较的平滑,没有刺痛感,假货的摸上去是稍有凹凸感的,略有波纹。 真品的字体都很清晰,假货的字体稍小一点,有一点模糊,排列也不是很整齐。 真品的编码可以查询扫描,下面的英文字体也很清楚,并带有官方地址。 正品的味道有点香,质地是…

    2022年10月17日
    610
  • 服装电商怎么做的,新手入门服装电商的专业知识

    摘要:2018年服饰鞋帽商品网上零售额占比达到25.9%,网购消费习惯推动服饰电商市场高速发展。iiMedia Research(艾媒咨询)显示,2018年中国服装电商市场规模为8205.4亿元,且仍保持着不断上升的增长率,中国服装销售市场发展加速,预计2019年中国服装电商市场规模将破万亿大关。 进入2019年,服饰穿戴电商保持良好的发展势头。近日,iiMediaResearch(艾媒咨询)发布…

    2022年7月11日
    910
  • 网站推广软文案例,写网站推广软文的要点与技巧

    我们先来了解一下什么是软文? 软文之所以叫做软文,是因为与硬广告相比,其精妙之处就在于一个“软”字,好似绵里藏针,收而不露,克敌于无形,等到你发现这是一篇软文的时候,你已经冷不丁地掉入了被精心设计过的“软文广告”陷阱。广告似攻城,软文如攻心。 软文是新闻,它不是广告。软文所提供的新闻信息,是用来指导人们的生活、消费、采购,给人们带来帮助的内容。 所以,我们在写软文的时候,就要必须考虑:我们不能再卖…

    2022年7月27日
    540
  • 什么网游适合平民赚钱,适合平民玩的大型网游推荐

    2016年,在网游搬砖界发生了一件震惊全圈的事情:一位DNF玩家晒出自己搬砖8年的积蓄,换了郑州三环的一套房子,此举秀出了网游搬砖的至高境界,壕无人性、令人羡慕。 如今,时间马上就要来到2020年,当手游狂潮席卷而来,端游的日子似乎越来越难,很多网友觉得当年电脑五开欢乐搬砖的日子恐怕一去不复返了。然而在2019年端游却出现了复苏的迹象,这大概是经历了手游狂欢之后,越来越多的玩家领悟到了端游品质更高…

    2022年9月1日
    710
  • 网上注册商标流程是怎样的,教你个人网上注册商标省钱办法

    3月10日起、在中国有经常居所或营业所的可以登录国家工商局中国商标网的网上申请栏目办理商标注册业务了,网上申请、网上查询、网上公告、网上缴费全部实现。 小编所在单位山西大禹防水堵漏工程公司早早注册了账号记录下了详细步骤,供大家参考。 1、进入国家工商行政管理局管理总局点击商标申请 2、点击接受新版 3、点击用户登录下方的数字证书驱动下载 4、根据自身情况现在对应驱动,作者下载的是第三个 5、驱动下…

    2022年8月22日
    550
  • 免费淘宝推广软件下载,如何选择合适的软件

    淘客火了八九年,至今余热未减。为什么这么火,因为它长久,淘宝不倒,项目不倒。尤其是双十一和双十二以及年末,淘宝网的流量持续攀升,还有就是淘宝的流量相对的很精准,正是捞钱的大好时机。 传统的淘宝客模式是别人从我们的推广链接下单,我们从中获取提成,提成的多少取决于我们推广效果。今天我就来为大家介绍一个新的模式,叫店铺淘宝客。 而店铺淘客借力淘店做淘客。只要完成起步操作之后,后期基本就能实现自动化操作,…

    2022年5月22日
    670
  • 内网监控系统(局域网信息监控)

    日前“离职(倾向)监测系统”火上热搜,有网友称因上班时间浏览了招聘网站,被公司通过行为感知系统分析所得结论裁员(该网友表示此前并不知情该系统存在)。 据悉,该系统通过收集、使用员工上网数据,可对企业员工进行离职倾向分析、评级,评价词汇包含“高危”“疑似”“可疑”等。此前不少关于公司内网监控越界,涉及侵犯员工隐私事件频频曝光。那么,对于员工来说,内网监控改变了什么?侵犯了什么?对未来会产生怎样的影响…

    2022年5月7日
    830
  • 小米电视怎么装第三方软件,方法很简单只需四个步骤就搞定

    最近有很多用户称自己购买了小米全面屏幕电视之后,不知道怎么安装第三方软件,今天小编就来教大家一个非常简单的方法,一键安装当贝市场等第三方软件。方法很简单,首先要做好准备工作,分别准备好一个U盘和一个电脑。 然后进入小米全面屏电视主页,选择“小米电视设置”,找到”帐号与安全“选项,将“安装未知来源应用”设置为允许; 第三步,就是从电脑里下载好当贝市场并拷贝到U盘,然后将U盘插到小米全面屏电视的USB…

    2022年10月5日
    1810
  • 主页修改不了怎么办,教你一招轻松解决

    问题是这样的:我使用的2345加速浏览器,原来的主页是2345导航,结果某一天,主页不知不觉中被恶意篡改为别人推广的2345导航页了。并且,该主页附带广告,令人讨厌无比,如下图1 虽然我尝试在浏览器选项中修改主页(下图2)、用360锁定主页,当时还可以,但是当我关闭此浏览器再次打开时,一切都失效了:又被改为上述流氓主页啦! 现在终于找到了合适两种的方法,分享给大家。 方法一、重装此浏览器 1可以先…

    2022年9月27日
    670
  • 第五人格怎么许愿,第五人格获取许愿码具体流程

    第五人格许愿码怎么获得?第五人格许愿码大全汇总分享!很多小伙伴发现这个第五人格游戏中有一个许愿码,但是小伙伴们都不知道许愿码怎么获得,下面就让小编来为大家来解答一下吧!感兴趣的朋友看来看看吧! 第五人格许愿码怎么获得? 亲爱的玩家,您抢到的官网安卓礼包码是:NGSCF4FCG0Z。 许愿码说明 许愿码就是所谓的礼包兑换码,在这里输入正确的许愿码之后玩家就可以在邮箱中收到相应的礼包。跟其他游戏中的礼…

    2022年6月29日
    640

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信