spring-boot文件上传

原创
2018/01/08 11:29
阅读数 1.1K

文件上传

spring-boot上传的文件,使用MultipartFile file对象来接收,具体的接口有以下几个

  • @RequestParam("filename")MultipartFile file //使用MultipartFile来接受上传文件
  • file.isEmpty() //判断上传文件是否为空
  • file.getContentType() //获取文件类型
  • file.getInputStream() //获取文件的输入流
  • file.getSize() //获取文件的尺寸
  • file.getOriginalFilename();//获取上传文件名称
  • file.getBytes();//获取上传文件的byte[]
  • file.transferTo(dest);//表示将上传文件写入目标文件

下面看一个例子,前台上传一个文件到这个接口,然后接口处理

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;

@RestController
@RequestMapping(value = "/upload")
public class UploadController {

    @Value("${upload.dir}")
    private String UPLOAD_DIR;

    //上传单个文件
    @PostMapping(value = "/file")
    public String upload(@RequestParam("filename")MultipartFile file){
        String subName="";
        try{
            subName = executeUpload(file);
        }catch (Exception e){
            e.getStackTrace();
            return "上传失败:"+e.getMessage();
        }
        return "上传成功,文件名:"+subName;
    }

    //上传多个文件
    @PostMapping(value = "/files")
    public ArrayList<String> uploads(@RequestParam("filename") MultipartFile[] files){
        ArrayList<String> filenames = new ArrayList<>();
        if(files.length==0){
            return filenames;
        }
        for(int i=0;i<files.length;i++){
            if(!files[i].isEmpty()){
                try{
                    String subName = executeUpload(files[i]);
                    filenames.add(subName);
                }catch (Exception e){
                    e.getStackTrace();
                    return filenames;
                }
            }
        }
        return filenames;
    }

    //上传文件
    private String executeUpload(MultipartFile file)throws Exception{
        String filename = file.getOriginalFilename();//上传文件名称
        String suffixName = filename.substring(filename.lastIndexOf("."));//上传文件后缀
        String newFilename = UUID.randomUUID().toString().replace("-","")+suffixName;//新文件名
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String subName = "/"+sdf.format(new Date())+"/"+newFilename;

        //如果目录不存在就创建
        File dest = new File(UPLOAD_DIR+subName);
        if(!dest.getParentFile().exists()){
            dest.getParentFile().mkdirs();
        }

        file.transferTo(dest);//上传文件到目标
        return subName;
    }
    
    //上传文件2
    @PostMapping(value = "/file2")
    public String file2(@RequestParam("filename") MultipartFile file)throws Exception{
        if(file.isEmpty()){
            return "请选择上传文件";
        }
        String filename = file.getOriginalFilename();
        byte[] bytes = file.getBytes();
        String result = excuteFile(filename,bytes);
        return result;
    }
    
    //将数据保存为文件
    private String excuteFile(String filename,byte[] bytes)throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String filePath = UPLOAD_DIR + "/"+sdf.format(new Date())+"/";
        File targetFile = new File(filePath);
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        String suffixName = filename.substring(filename.lastIndexOf("."));
        String newFilename = UUID.randomUUID().toString().replace("-","")+suffixName;
        FileOutputStream out = new FileOutputStream(filePath+newFilename);
        out.write(bytes);
        out.flush();
        out.close();
        return filePath+newFilename;
    }
        
}

上传文件大小配置

上传文件大小的配置在application.properties中配置

  • spring.http.multipart.max-file-size=1024MB 最大的上传限制容量
  • spring.http.multipart.max-request-size=10MB 最大的请求容量
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部