您的位置:

使用MultipartFile修改文件名

一、MultipartFile概述

MultipartFile是Spring MVC提供的一种接口,可用于在Web应用程序中处理多部分请求,其中包括文件上传。当用户上传文件时,服务器通过此接口将文件读入内存,您可以使用此对象对文件进行操作,例如修改文件名。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());
    try {
        //对文件进行操作
        //...
        return "redirect:/success";
    } catch (Exception ex) {
        redirectAttributes.addFlashAttribute("message",
                "Your " + fileName + " is wrong!");
        return "redirect:/failure";
    }
}

二、修改文件名

通过MultipartFile获取文件名,你可以对文件名进行操作,例如添加前缀或后缀,修改文件类型等。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());//获取文件名
    String newFileName = "new_" + fileName;//新文件名
    try {
        //对文件进行操作
        //...
        return "redirect:/success";
    } catch (Exception ex) {
        redirectAttributes.addFlashAttribute("message",
                "Your " + fileName + " is wrong!");
        return "redirect:/failure";
    }
}

三、更改文件类型

你也可以通过修改文件名来更改文件类型。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());//获取文件名
    String newFileName = fileName.replaceAll("\\.\\w+$", ".jpg");//修改文件类型为jpg
    try {
        //对文件进行操作
        //...
        return "redirect:/success";
    } catch (Exception ex) {
        redirectAttributes.addFlashAttribute("message",
                "Your " + fileName + " is wrong!");
        return "redirect:/failure";
    }
}

四、添加时间戳

为了防止文件名重复,你可以在文件名中添加时间戳。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    String fileName = StringUtils.cleanPath(file.getOriginalFilename());//获取文件名
    String newFileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
            + "_" + fileName;//添加时间戳
    try {
        //对文件进行操作
        //...
        return "redirect:/success";
    } catch (Exception ex) {
        redirectAttributes.addFlashAttribute("message",
                "Your " + fileName + " is wrong!");
        return "redirect:/failure";
    }
}

五、使用UUID作为文件名

UUID是唯一标识符,可以用作文件名,配合文件类型后缀,可以确保文件名的唯一性,避免文件名冲突。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {
    String fileType = StringUtils.getFilenameExtension(file.getOriginalFilename());//获取文件类型
    String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileType;//使用UUID作为文件名
    try {
        //对文件进行操作
        //...
        return "redirect:/success";
    } catch (Exception ex) {
        redirectAttributes.addFlashAttribute("message",
                "Your " + fileName + " is wrong!");
        return "redirect:/failure";
    }
}