JAVA代码中上传文件

这是一个关于文件上传的Java后端实现,使用了MultipartFile接口处理文件,检查文件非空,获取文件名和后缀,创建时间目录,判断数据库中是否已有相同文件名的记录,若无则将文件保存到指定路径,并返回相关信息给前端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@PostMapping("/upload")
public ResultVo upload( @RequestParam("file") MultipartFile file,Map paramMap) throws IOException {
    ResultVo resultVo = new ResultVo();
    System.out.println("准备上传");
    if (file.isEmpty()) {
        throw new RuntimeException("上传的文件不能为空");
    }
    //获取原始文件名称
    String originalFilename = file.getOriginalFilename();
    //获取文件后缀名
    String extension = "." + FilenameUtils.getExtension(originalFilename); //.jpg
    //获取新文件名称 命名:去掉上传的后缀名
    String newFileName = originalFilename.substring(0,originalFilename.lastIndexOf("."));
    //获取资源路径 classpath的项目路径+/static/files  classpath就是resources的资源路径
    String path = ResourceUtils.getURL("classpath:").getPath() + "static/report/";
    //新建一个时间文件夹标识,用来分类
    String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    //全路径(存放资源的路径) 资源路径+时间文件夹标识
    String dataDir = path + format;
    //全路径存放在文件类中,判断文件夹是否存在不存在就创建
    File filePath = new File("C:/desktop/");  //也可以直接放进去进行拼接 File dataFile = new File(path,format);
    if (!filePath.exists()) {
        filePath.mkdirs();
    }
    paramMap.put("name",newFileName);
    //判断数据库里面是不是有这个文件存在,存在则不允许继续上传
    List<ReportTemplate> templateNames = rptTemplateService.getTemplateName(paramMap);
       if (templateNames.size()>0){
           throw new RuntimeException("该报表模板名称已存在,请再选上传文件");
       }else{
           //文件上传至指定路径
           file.transferTo(new File("C:/desktop/", newFileName));
         //new一个对象,把需要的参数放到map里面传给前端
           Map<String,Object> data = new HashMap<String,Object>();
           data.put("templateFilePath",filePath);
           data.put("name",newFileName);
           resultVo.setData(data);
           System.out.println("上传结束");
           return resultVo;
       }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值