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

相关推荐

  • 哪款电视盒子好用,画质最好的五款电视盒子推荐

    细看如今我们的网络机顶盒市场,可谓琳琅满目花样频出,各种盒子百花齐放,各有各的特色。非常有必要将所有的盒子分出类别,排出名次,不仅方便有选购盒子需求的消费者,也可以帮助大家分辨自己家中盒子的优劣,更好的换购或者重新设置。以下则为业内公认排名最靠前的六大盒子,各有自身特色和利弊之处,供大家参考。 No.1泰捷盒子Webox30Pro 泰捷作为网络机顶盒领域内为数不多的开山鼻祖之一,一直稳坐网络机顶盒…

    2022年7月23日
    1210
  • 小米手机型号大全(小米手机最值得入手的四款)

    竞争激烈是国内手机市场一个公认的事实,当我们在买手机的时候都比较性价比,既然提到性价比,你第一个想到的是那个国内手机厂商?是不是小米?与其他国产安卓机相比,小米确实更具性价比,但是随着ov也开始注重性价比,其实小米旗下的手机并不是型号都还能做到性价比,所以今天给介绍四款小米旗下真正具有性价比的手机。 No.1RedmiK30Pro RedmiK30Pro正面搭载一块6.67英寸的全面屏,由于屏幕没…

    2022年10月27日
    390
  • linux运维是做什么的,linux运维日常工作内容

    可能你还不知道Linux是什么“物种”,可能你就从事相关工作,Linux怎么解释,百度百科这样说:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 那…

    2022年8月9日
    680
  • 淘宝职业打假人一般通过什么途径进入店铺,职业打假人的运作模式

    你以为职业打假人真的很暴利吗?是的,他们的暴利你根本想象不到。“你怎么证明山核桃是5天内炒制的?”尽管小郑一向能言善辩,但面对这样的诘问还是理屈词穷,因为他没办法让炒好的山核桃自己说话。小郑遭遇的不是一般的诘问,而是碰到了“职业打假人”—他们游离在电商平台与法律的边缘,以打假的名义,行敲诈之实。 小郑是一家坚果店铺的老板,前段时间,他上架了一款自家产的山核桃。在产品详情页上,他如实做出了保证—所有…

    2022年6月30日
    580
  • 有什么好的创业项目,推荐四个无本钱也能创业的行业

    穷人想创业,但是感觉满大街都是做生意的,商家非常多,竞争非常激烈,也不知道做什么好。 而且对于穷人来说创业开店,资金是大难题。今天就给大家介绍4个投资小,好操作的适合穷人开店的项目。 适合穷人发家的小本创业项目之一:特产水果批发 这个需要创业者灵活利用地区差异做买卖。 比如在柑橘应季的时候,有些省份几乎家家户户都有柑橘,在整个大区域享有盛名,但是却不被当地人所珍惜。创业者可以到乡下批发这种水果,发…

    2022年9月27日
    380
  • 网络创业项目有哪些,5个火爆互联网的创业项目推荐

    大家好,今天给大家安利一款在家就能赚钱的app—羊帮app:这是一款集信息,人脉,悬赏于一体的综合平台,说白了就是类似众人帮,趣闲赚、牛帮等悬赏任务型的平台。 但羊帮APP却有着得天独厚的优势,它最NB的地方在于商家发任务无需开会员,置顶2元/小时,推荐1元/小时,大平台独创做任务即可参与分红,1元起提现次数无上限0手续费! 小编也是在几个月前接触了这款软件,并且成为了这款软件的受益者。,说实…

    2022年7月9日
    560
  • 中国创业者有多少,中国企业家励志故事分享

    腾讯高级执行副总裁汤道生认为,创业已经成为我们所处时代的主题。首先是政府对创业的重视、扶持。9月份,李克强总理就已经表示,要借改革创新的东风,在中国掀起大众创业、草根创业的新浪潮,各个政府也都给予了创业者诸多政策和资金的帮助;其次是行业格局已经逐渐区域化,二三线城市创业者迅速增加。 他还代表腾讯给出了一组数据:目前腾讯开放平台创业者人数已达500万,同比增长400%,其中二三线城市创业者增长率超过…

    2022年5月28日
    690
  • 洗衣机什么牌子的好,公认质量最好的款洗衣机

    我们很难客观地说哪个品牌最好,但是桃李不言下自成蹊,卖得好的品牌质量都不会太差。我帮大家整理了在中国的几大购物平台上销量最好的五个品牌,给大家在购买洗衣机时做个参考。 1、海尔(Haier) 创立于1984年的海尔是全球最大的家电企业之一,在全球的冰箱、洗衣机领域拥有优势。 在国内市场,海尔洗衣机在功能、种类方面都具有优势,质量也不输国外品牌。并且,对于洗衣机这种非常成熟的家电产品来讲,国产品牌完…

    2022年10月9日
    350
  • 优化方案怎么写,优化方案的格式及范文

    我们很多企业网站的SEO优化者,是一个只有少数几个人的团队;甚至很多公司可能就1个人,负责网络有关的所有工作,除了本职的seo网络推广工作,还要修修电脑整整打印机跑跑腿。这样的情况如果还要写什么seo操作方案,貌似真真的有点多此一举的感觉了。不过可能就是这多此一举的想法,企业网站可能永远都停留原地,排名想进进不了流量想增增不了,订单想有有不了。 还是花个半天时间认认真真写个方案,分析自己网站的同时…

    2022年7月26日
    610
  • 宣传推广的形式和完成方案(2020最新互联网免费推广的方法)

    推广产品主要有以下三种形式:我所认为的推广就是全网推广,和你产品对勾的网站大力推广。 1、先推广,后拉动。首先进行铺市,目标市场铺货率达到60%以上时,开始做一些大型的促销活动或广告宣传活动,刺激拉动消费者购买产品。 这样做的优点是:拉动效果能得到直接体现。由于有前期的铺货,经过促销宣传拉动后,消费者能在终端立即购买到此类产品,进而形成销售拉动。缺点是由于新产品知名度低,前期铺货难度大,速度相对较…

    2022年10月25日
    510

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信