文件上传Springboot架构,单文件和多文件上传/图片/视频/文档/复制即用

注:只做了文件上传操作,其他的操作可以找其他资料
1.在配置文件配置文件上传大小,默认是20MB,看自己业务需要设置

#源文件存放路径
upload.file.path=c://tmp//  
#文件上传大小
spring.servlet.multipart.max-request-size=500MB
spring.servlet.multipart.max-file-size=500MB
import com.mc.common.utils.ResultUtils;
import com.mc.common.vo.Result;
import com.mc.jewelrybespoke.app.service.FileUploadService;
import com.mc.jewelrybespoke.app.utils.PicUploadResult;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
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.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@Api(tags = {"文件上传"})
@RestController
@RequestMapping("/app/member/imagefile")
public class FileUploadController {

    // 允许上传的格式 图片形式
  //  private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".png"};
    // 文件允许格式
    private static final String[] ALLOWFILES_TYPE = { ".rar", ".doc", ".docx", ".zip",
            ".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg",
            ".bmp", ".xls", ".mp4", ".flv", ".ppt", ".avi", ".mpg", ".wmv",
            ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb" };

    @Resource
    private FileUploadService fileUploadService;

    @PostMapping("/uploadImg")
    public Result uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        boolean isFlag = false;
        for (String type : ALLOWFILES_TYPE) {
            System.out.println(file.getOriginalFilename());
            if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
                isFlag = true;
                break;
            }
        }

        if (isFlag) {
            PicUploadResult picUploadResult = fileUploadService.uplodadImg(file, request);
            boolean isLegal = picUploadResult.isLegal();

            if (isLegal) {
                Map resMap = new HashMap<>();
                resMap.put("imgPath", picUploadResult.getImgPath());
                return new ResultUtils<>().setData(resMap);
            } else {
                return new ResultUtils<>().setErrorMsg("图片上传有误");
            }
        } else {
            return new ResultUtils<>().setErrorMsg("上传的图片格式必须为: \".rar\", \".doc\", \".docx\", \".zip\",\n" +
                    "            \".pdf\", \".txt\", \".swf\", \".xlsx\", \".gif\", \".png\", \".jpg\", \".jpeg\",\n" +
                    "            \".bmp\", \".xls\", \".mp4\", \".flv\", \".ppt\", \".avi\", \".mpg\", \".wmv\",\n" +
                    "            \".3gp\", \".mov\", \".asf\", \".asx\", \".vob\", \".wmv9\", \".rm\", \".rmvb\"");
    }
 }

    @PostMapping("/uploadManyImg")
    public Result uploadManyImg(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
        boolean isFlag = false;
        for (MultipartFile uploadFile : files) {
            for (String type : ALLOWFILES_TYPE) {
                if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
                    isFlag = true;
                    break;
                }
            }
        }

        if (isFlag) {
            PicUploadResult picUploadResult = fileUploadService.uploadManyImg(files, request);
            boolean isLegal = picUploadResult.isLegal();

            if (isLegal) {
                Map resMap = new HashMap<>();
                resMap.put("imgPaths", picUploadResult.getImgPahts());
                return new ResultUtils<>().setData(resMap);
            } else {
                return new ResultUtils<>().setErrorMsg("文件上传有误");
            }
        } else {
            return new ResultUtils<>().setErrorMsg("上传的图片格式必须为:\".rar\", \".doc\", \".docx\", \".zip\",\n" +
                    "            \".pdf\", \".txt\", \".swf\", \".xlsx\", \".gif\", \".png\", \".jpg\", \".jpeg\",\n" +
                    "            \".bmp\", \".xls\", \".mp4\", \".flv\", \".ppt\", \".avi\", \".mpg\", \".wmv\",\n" +
                    "            \".3gp\", \".mov\", \".asf\", \".asx\", \".vob\", \".wmv9\", \".rm\", \".rmvb\"");
        }
    }
}
public interface FileUploadService {
    //单图片上传
    PicUploadResult uplodadImg(MultipartFile multipartFile, HttpServletRequest request);

    //多图片上传
    PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request);
}
import com.mc.jewelrybespoke.app.service.FileUploadService;
import com.mc.jewelrybespoke.app.utils.PicUploadResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Service
public class FileUploadServiceImpl implements FileUploadService {

    // 预留项目上传至绝对路径(在yml里配置你的项目绝对路径)
    @Value("${upload.file.path:c:/tmp/}")
    private String uploadFilePath;

    // 项目根路径下的目录  -- SpringBoot static 目录相当于是根路径下(SpringBoot 默认 为:/static/images/upload/)
    private final static String UPLOAD_PATH_PREFIX = "/mc/upload/img/";

    @Override
    public PicUploadResult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) {
        PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request);
        return picUploadResult;
    }

    @Override
    public PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request) {
        List<String> imgPaths = new ArrayList<>();
        for (MultipartFile multipartFile : uploadFile) {
            PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request);
            if(picUploadResult.isLegal()){
                imgPaths.add(picUploadResult.getImgPath());
            }else{
                return picUploadResult;
            }

        }
        PicUploadResult picUploadResult = new PicUploadResult();
        picUploadResult.setLegal(true);
        picUploadResult.setImgPahts(imgPaths);
        return  picUploadResult;
    }



    /**
     * 上传图片方法类
     * @param multipartFile
     * @param request
     * @return
     */
    private PicUploadResult uploadImgMethod(MultipartFile multipartFile, HttpServletRequest request) {
        PicUploadResult picUploadResult = new PicUploadResult();
        if (multipartFile.isEmpty()) {
            //返回选择文件提示
            picUploadResult.setLegal(false);
            return picUploadResult;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/");
        String format = sdf.format(new Date());
        //存放上传文件的文件夹
        //File file = new File("E:\\images" + format);
        File file = new File(uploadFilePath);
        System.out.println("-----------存放上传文件的文件夹【" + file + "】-----------");
        System.out.println("-----------输出文件夹绝对路径 -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径【" + file.getAbsolutePath() + "】-----------");
        if (!file.isDirectory()) {
            //递归生成文件夹
            file.mkdirs();
        }
        //获取原始的名字  original:最初的,起始的  方法是得到原来的文件名在客户机的文件系统名称
        String oldName = multipartFile.getOriginalFilename();
        System.out.println("-----------文件原始的名字【" + oldName + "】-----------");
        String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."), oldName.length());
        System.out.println("-----------文件要保存后的新名字【" + newName + "】-----------");
        try {
            //构建真实的文件路径
            File newFile = new File(file.getAbsolutePath() + File.separator + newName);
            //转存文件到指定路径,如果文件名重复的话,将会覆盖掉之前的文件,这里是把文件上传到 “绝对路径”
            multipartFile.transferTo(newFile);
            //我只需要用相对路径,IP和端口由前端去拼接服务器IP和网关端口来访问图片
            String filePath =UPLOAD_PATH_PREFIX + newName;
            //拼接绝对路径:IP+端口+项目路径+文件名
           // String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + UPLOAD_PATH_PREFIX + newName;
            System.out.println("-----------【" + filePath + "】-----------");

            picUploadResult.setLegal(true);
            picUploadResult.setImgPath(filePath);
            return picUploadResult;
        } catch (Exception e) {
            e.printStackTrace();
        }
        picUploadResult.setLegal(false);
        return picUploadResult;
    }
}

实体

public class PicUploadResult implements Serializable {

    /**
     *文件上传状态
     */
    private boolean Legal;

    /**
     * 文上传路径
     */
    private String ImgPath;

    /**
     * 多文件上传路径集合
     */
    private List<String> ImgPahts;

    public boolean isLegal() {
        return Legal;
    }

    public void setLegal(boolean legal) {
        Legal = legal;
    }

    public String getImgPath() {
        return ImgPath;
    }

    public void setImgPath(String imgPath) {
        ImgPath = imgPath;
    }

    public List<String> getImgPahts() {
        return ImgPahts;
    }

    public void setImgPahts(List<String> imgPahts) {
        ImgPahts = imgPahts;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值