spring文件上传怎么实现(spring文件上传大小限制)

SpringBoot或SpringCloud快速实现文件上传 很多时候我们都需要在SpringBoot或SpringCloud中快速集成文件上传功能,但是对于新手来说增加文件上传功能需要查阅很多文档。这里给出了示例可以帮助您快速将文件上传功能集成到系统中来。 第一步,我们需要在application.yml中配置文件上传的大小 spring: servlet: multipart: max-fil…

Spring Boot或Spring Cloud迅速完成文件上传

许多情况下我们都必须在Spring Boot或Spring Cloud中迅速集成文件上传功能,可是针对初学者而言提升文件上传功能必须查看许多文本文档。这儿得出了实例可以协助您迅速将文件上传功能集成到系统软件中。

第一步,大家必须在application.yml中配备文件上传的尺寸

spring:
  servlet:
    multipart:
      max-file-size: 1500MB
      max-request-size: 1500MB

第二步,为了更好地能迅速解决文件夹名称和URL,我们要使用FilenameUtils,在pom.xml的dependencies中引入Apache Commons IO,留意是不是已经有引入,防止版本矛盾

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

第三步,写一个Controller,解决文件上传的要求

import org.apache.commons.io.FilenameUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;

/**
 * 文件上传控制板
 *
 * @author 杨若瑜
 */
@RestController
@RequestMapping(\"/platform/\")
public class UploadFileController {
    // 相对性于新项目根途径的提交途径
    private static final String UPLOAD_FOLDER = \"/upload/\";
    // 回到给前面的网络服务器根途径(分布式系统、CDN情景很有效)
    private static final String URL_SERVER = \"http://127.0.0.1:8080/\";
    // 容许提交的文件扩展名
    private static final String[] ALLOW_EXTENSIONS = new String[]{
            // 照片
            \"jpg\", \"jpeg\", \"png\", \"gif\", \"bmp\",
            // 压缩文件
            \"zip\", \"rar\", \"gz\", \"7z\", \"cab\",
            // 音频视频,
            \"wav\", \"avi\", \"mp4\", \"mp3\", \"m3u8\", \"ogg\", \"wma\", \"wmv\", \"rm\", \"rmvb\", \"aac\", \"mov\", \"asf\", \"flv\",
            // 文本文档
            \"doc\", \"docx\", \"xls\", \"xlsx\", \"ppt\", \"pptx\", \"pot\", \"txt\", \"csv\", \"md\", \"pdf\"
    };

    /**
     * 分辨文件夹名称是不是容许提交
     * @param fileName 文件夹名称
     * @return
     */
    public boolean isAllow(String fileName) {
        String ext = FilenameUtils.getExtension(fileName).toLowerCase();
        for (String allowExtension : ALLOW_EXTENSIONS) {
            if (allowExtension.toLowerCase().equals(ext)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 文件上传
     * @param request 要求
     * @param file 文档,与前台接待表单提交的file相一致
     * @return 回到JSON
     */
    @RequestMapping(\"upload\")
    public Object upload(HttpServletRequest request, @RequestParam(\"file\") MultipartFile file) {
        String webAppFolder = request.getServletContext().getRealPath(\"/\");

        String fileName = file.getOriginalFilename();
        if (isAllow(fileName)) {
            String ext = FilenameUtils.getExtension(fileName).toLowerCase();
            String newFileName = UUID.randomUUID().toString().replace(\"-\", \"\");
            // 全自动建立提交文件目录
            String targetPath = FilenameUtils.normalize(webAppFolder   \"/\"   UPLOAD_FOLDER);
            String targetFile = FilenameUtils.normalize(targetPath   \"/\"   newFileName   \".\"   ext);
            new File(targetPath).mkdirs();

            try {
                String urlPath = URL_SERVER   \"/\"   UPLOAD_FOLDER   \"/\"   newFileName   \".\"   ext;
                file.transferTo(new File(targetFile));
                Map<String, Object> resJson = new LinkedHashMap<>();
                resJson.put(\"status\", \"success\");
                resJson.put(\"data\", FilenameUtils.normalize(urlPath,true).replace(\"http:/\",\"http://\").replace(\"https:/\",\"https://\"));
                return resJson;
            } catch (Exception e) {
                e.printStackTrace();
                Map<String, Object> resJson = new LinkedHashMap<>();
                resJson.put(\"status\", \"error\");
                resJson.put(\"message\", \"文件上传不成功:\"   e.getMessage());
                return resJson;
            }

        } else {
            Map<String, Object> resJson = new LinkedHashMap<>();
            resJson.put(\"status\", \"error\");
            resJson.put(\"message\", \"该种类文档不允许提交\");
            return resJson;
        }
    }
}

第四步、写一个检测网页页面upload.html,运行并测试一下是不是实用。

<!doctype html>
<html lang=\"zh\">
<head>
    <meta charset=\"UTF-8\">
    <meta name=\"viewport\"
          content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">
    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">
    <title>文件上传检测</title>
</head>
<body>
    <form action=\"/platform/upload\" method=\"post\" enctype=\"multipart/form-data\">
        请选择文件:<input type=\"file\" name=\"file\"><br>
        <input type=\"submit\" value=\"提交\">
    </form>
</body>
</html>

挑选一张照片,提交

Spring Boot或Spring Cloud迅速完成文件上传

这时后台管理会回到一个JSON,大家开启data所对准的图片看一下是不是上传取得成功:

Spring Boot或Spring Cloud快速实现文件上传

果真,图片已经上传取得成功

Spring Boot或Spring Cloud快速实现文件上传

至此,怎么使用Spring Boot或Spring Cloud完成文件上传作用就提到这儿。最终必须填补的是,假如你的应用情景应用ajax或App上传,提交表单种类务必为multipart/form-data,而且以post的方法递交。

这儿放入jQuery的案例:

// userInfoAvatar是一个input,而且type为file
var file = document.getElementById(\'userInfoAvatar\').files[0];
var formData = new FormData();
formData.append(\"file\",file);
$.ajax({
  type: \'POST\',
  url: \'/platform/upload\',
  data: formData,
  contentType: false,
  processData: false,
  dataType: \"json\",
  mimeType: \"multipart/form-data\",
  success: function(data) {
          // 取得成功时调整
  },    
  error : function(data){
  		  // 不成功时调整
   }
});

放入axios案例:

// userInfoAvatar是一个input,而且type为file
let file = document.getElementById(\'userInfoAvatar\').files[0];
let formData = new FormData();
formData.append(\"file\",file);
axios({
	method: \'POST\',
	url: \'/platform/upload\',
	data:formData,
	headers: {
		\'Content-Type\': \'multipart/form-data\'
	}
})
.then((data)=>{
	console.log(data)
})
.catch((ex)=>{
	console.error(ex)
})

放入Http Client Fluent API案例:

String fileName = 文件夹名称;
byte[] bytes = 文档的二进制;

MultipartEntityBuilder builder = MultipartEntityBuilder.create()
        .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
        .setCharset(Charset.forName(\"utf-8\"));
builder.addBinaryBody(\"file\", bytes, ContentType.MULTIPART_FORM_DATA, fileName); 

String responseJson = Request.Post(\"http://127.0.0.1:8080/platform/upload\")
        .connectTimeout(20000)
        .socketTimeout(20000)
        .body(builder.build())
        .execute().returnContent().asString();

System.out.println(responseJson);

别的的架构如出一辙就可以。真真正正放进宣布自然环境以前还记得要加强安全防护,对使用者开展身份验证。

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

(0)
上一篇 2022年5月8日 下午12:44
下一篇 2022年5月8日 下午12:46

相关推荐

  • 赶集网被58收购了吗,58收购赶集网并购过程

    今天去58同城找房子,没找到合适的。 那就去赶集网去看看,登录半天才打开网页。最为显眼的广告语:赶集网啥都有。 可是我没找到我想要的。 我又回到58同城,最为显眼的广告语:让生活更简单。 其实我也没有找到我想要的。但是我想说的是为什么是58同城收购了赶集网,优酷并购了土豆,美团并购了大众,滴滴并购了快车。 案例分析:58同城与赶集网的生死较量 1.名字问题 58同城,高大上,城里的生活。 赶集网,…

    2022年6月9日
    820
  • 高考防作弊:AI安防巨头斗法

    AI之于安防行业,显然是一次全方位的技术升级和应用升级

    2022年9月13日
    480
  • 苹果手机如何恢复微信删除的聊天记录,详细操作步骤分享给大家

    苹果手机微信聊天记录怎么恢复?无论是工作还是生活中,很多朋友习惯使用微信进行交流。因此微信中保存了很多重要的聊天内容。但微信也是最占用内存的,长时间聊天只会缓存大量的数据。这个时候我们会筛选一些不需要保留在手机上的聊天内容进行删除,删除的时候避免不了出现误删的情况,面对误删的聊天记录该怎么恢复呢!下面就告诉大家恢复方法。 使用绿色键的黑色键盘上的语音气泡 一、通过微信自带的方法恢复 如果是在使用微…

    2022年7月27日
    640
  • 什么是反链,外链和反链的区别介绍

    SEO外链和反链有什么区别? SEO外链和反链一直是纠缠的问题。沉浸在建站的早期阶段的网站管理员经常忽略这个问题,他们对此非常困惑。、很困惑,并且通常认为只要它被链接到自己网站就可以了,但是由于慢速、快照的缓慢更新,SEO外链和反链的问题开始被认真对待新的网站管理员。事实证明,不仅有链接,而且如何链,链在哪里链中最重要的问题也是SEO技能。 SEO内链和外链图释 俗话说,“内链为王,外链为皇帝”,…

    2022年7月13日
    610
  • 王者荣耀上线时间怎么算,王者荣耀英雄上线时间排序

    山河不足重,重在遇知已。好久不见,别来无恙。 随着新英雄镜的正式登场,王者荣耀终于迎来了100位英雄,从2015年内测到2020年,近5年的时间,100位英雄,成熟的KPL职业联赛体系,都在表明着这款游戏确实是非常火爆。近日官方公布了这100个英雄的上线时间,我们来看看你入坑的时候,是哪个英雄刚上线的时候吧~ 王者荣耀2015年11月26日公测开服的时候是有36个英雄,包括亚瑟、妲己、廉颇、武则天…

    2022年8月3日
    900
  • 一个企业的发展靠什么,决定企业生存和发展的三大要素

    企业发展靠什么? 在工作中,一定是讲工作效率,也就是想办法提高工作效率,降低人工成本,增加利润,这是企业发展的目的。 就比如说,搬完一车砖头需要支付1000的报酬,正常情况下,5个人一天才能搬完,后来公司引进了辅助工具,提高了工作效率,只需要3个人就能完成,如果说在效率提高的情况下还在雇佣5个人是属于资源上的浪费,那么这个时候,做好的做法是要3个人,给800块,公司可以多次200块用于设备上投资,…

    2022年7月16日
    5840
  • 电商如何做推广,电商推广渠道与技巧

    电子商务的推广,从广义上说分为线下推广和网络(线上)推广,但是在现在互联网发展这么迅速的情况下,网络推广的渠道有很多。 一、不花钱的 1、博客推广 在各大博客站点建立所推广信息的官方博客和个人博客。官方博客主要用来发布推广信息的相关资讯和其他相关新闻,让博客火起来,从而达到宣传的效果。个人博客可以发布些和推广信息同类的受广大网民关注的热点文字,文章里面做上推广信息的关键词和超链接。这样会引来大量点…

    2022年6月27日
    530
  • 网站怎么优化首页seo,网站推广方法和技巧

    网站排名怎么做到首页,看看这个网站的关键词多久能够排名上来?这是经常听到SEO站长问这样的问题。 直接甩个网址,问多久把关键词排名上来,这也是一个非常消耗时间的问题之一。 首选,都不清楚你这个网站到底目标关键词是做哪些?首页到底竞争哪些关键词,站内关键词都是如何设置的,不得而知。 其次,网站是优化了多久,新站刚上线?还是老网站无排名?目前都做了哪些操作呢?这些是需要站长本人提供些阐述和说明。 最后…

    2022年5月24日
    720
  • 网页推广软件哪个好,2019年最流行的网页常用设计软件推荐

    无论是新手还是资深的网页设计师,除了掌握必备技能,选择一款适合自己的网页设计软件也十分重要!使用一款适合自己的网页设计工具,往往能令工作效率大增。 了解常用的网页制作软件及功能是必备之基础,但是对于初学者来说,往往显得还不明确,下面macdown小编就为大家介绍几款网页设计常用软件,也是网页设计必备软件,希望对想要学习网页设计的新手提供一些帮助! 必学Photoshop 既然是网页设计,那么Pho…

    2022年5月20日
    760
  • 2020单反相机性价比排行,初学摄影者必备

    又到了双11了,马上就是双旦以及春节,因此很多人也开始考虑买个相机,比如单反或者无反。这次评价君就盘点下,各个价位有哪些比较不错的机型可以选择。 5000元价位,尼康D7500 本来这一价位应该还有尼康的Z50,但是其单机要5800元,而D7500单机最低已经降到了4900元,还是有所差距的。并且,Z50现在还是预定阶段,且并不支持老的F卡口镜头。(哎,F卡口都成老卡口了) D7500采用了D50…

    2022年9月6日
    610

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信