Home > Back-end >  SpringBoot absolute path clarification
SpringBoot absolute path clarification

Time:10-24

I'm new to SpringBoot web dev. I need to save an image to a directory in the current project. I have given path as "String uploaddir = "./src/main/imageuploads/" savedadvert.getId();" but the image not save to the "./src/main/imageuploads/" directory in eclipse project.

@RequestMapping(value="/upload", method = RequestMethod.POST)
public String FileUpload(@RequestParam("file1Url") MultipartFile multipartfile, Model model) throws IOException {
    
    model.addAttribute("advertsim",new advertsummary());
    
    advertsummary advert = new advertsummary();
      
    String file1Urlname= StringUtils.cleanPath(multipartfile.getOriginalFilename());
    advert.setFile1Url(file1Urlname);
                                               
    advertsummary savedadvert = AdvertService.addadvert(advert);
    
    String uploaddir = "./src/main/imageuploads/"  savedadvert.getId(); 

    FileUploadUtil.saveFile(multipartfile, file1Urlname, uploaddir);    
    
    return "uploadview";
}

This is the saveFile method for ref.

public static void saveFile(MultipartFile multipartFile, String fileName, String uploadDir) throws IOException {
     Path uploadPath = Paths.get(uploadDir);
     
        if (!Files.exists(uploadPath)) {
            Files.createDirectories(uploadPath);
        }
          
        try (InputStream inputStream = multipartFile.getInputStream()) {
            Path filePath = uploadPath.resolve(fileName);
            System.out.println(filePath.toFile().getAbsolutePath());
            Files.copy(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException ioe) {       
            throw new IOException("Could not save image file: "   fileName, ioe);
        }
    
}

I need to upload the image to this directory, enter image description here

when I get the absolute path, it shows like this "/Users/chathura/eclipse/jee-2021-03/Eclipse.app/Contents/MacOS/./src/main/imageuploads/24/new file.jpg". There is no way to go to this directory but I can access that directory using the terminal.

enter image description here

Please tell me what is the mistake here?

Note : I'm using macos

Thanks in advance

CodePudding user response:

  1. Could you try 'src/main/resources/imagesuploads' (without .)
  2. Just a reminder: This directory will disappear when you package your application (production mode)
  3. This directory should be configurable from an external file (application. properties for example)

CodePudding user response:

Thank you Ali, your response gave a lead to the solution. My project sits on MacOS partition therefore, I couldn't write a file without permission. I simply changed the location to another partition and it worked.

    @RequestMapping(value="/upload", method = RequestMethod.POST)
public String FileUpload(@RequestParam("file1Url") MultipartFile multipartfile, Model model) throws IOException {
    
    model.addAttribute("advertsim",new advertsummary());
    
    advertsummary advert = new advertsummary();
      
    String file1Urlname= StringUtils.cleanPath(multipartfile.getOriginalFilename());
    advert.setFile1Url(file1Urlname);
                                               
    advertsummary savedadvert = AdvertService.addadvert(advert);
    
    String uploaddir = "/Volumes/My Data/Fileupload"  savedadvert.getId();  

    FileUploadUtil.saveFile(multipartfile, file1Urlname, uploaddir);    
    
    return "uploadview";
}

Thank you

  • Related