Загрузить изображение с помощью Springboot в Linux - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь загрузить изображение, используя spring-boot.Приложение должно поддерживать Linux и Windows.Приведенные ниже коды работают только в Windows, а не в Linux.Я пробовал по-разному.getDefaultFolderPath() создает папку в обеих ОС, если она не существует.Но Files.write(path, bytes); работает только в Windows.

String imageWindowsPath = "C:\\myapp\\";
String imageLinuxPath = "user.home";    

private String uploadImage(MultipartFile file, HttpServletRequest request) {
    String fileName = "blur.png";

    if (!file.isEmpty()) {
        byte[] bytes = file.getBytes(); 
        Path path = Paths.get(getDefaultFolderPath() + fileName);
        Files.write(path, bytes);
    }

    //few other codes
    retrun "";
}

//Creating folder if not exists... This is working for both OS
public String getDefaultFolderPath() {

    String path = "";
    try {
        String os = System.getProperty("os.name");
        if (os.toUpperCase().indexOf("WINDOWS") != -1) {
            File file = new File(imageWindowsPath+"slider");                
            if (!file.exists())
                file.mkdirs();

            path = imageWindowsPath+"/slider/";
        } 
        else if (os.toUpperCase().indexOf("LINUX") != -1) {
            String userHome = System.getProperty(imageLinuxPath);
            String appName = "slider";

            Path linuxpath = Paths.get(userHome, appName);          
                Files.createDirectories(linuxpath); 

            path = imageLinuxPath+"/slider/";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    //few codes 

    return path;
}

Пожалуйста, предложите мне решение, если кто-нибудь знает.Заранее спасибо.

1 Ответ

0 голосов
/ 19 сентября 2018
String imageLinuxPath = "user.home";    

        String userHome = System.getProperty(imageLinuxPath);
        String appName = "slider";

        Path linuxpath = Paths.get(userHome, appName);          
            Files.createDirectories(linuxpath); 

создает каталог на основе переменной среды "user.home"

        path = imageLinuxPath+"slider/";
return path;

возвращает "user.homeslider /"

Так как содержимое переменной среды пользователя.Возможно, home не "user.home", путь не будет каталогом, который был создан.Это означает, что вы пытаетесь записать в каталог, который не существует.

Я хотел бы добавить, что разница между Windows и Linux - полностью ваше собственное творение.Java может обращаться с ними точно так же, если у вас есть свойство Windows с домашним путем.

...