Сохранить изображение на другом пути к серверу, используя Java

#java #spring #spring-boot #hibernate #file-io

#java #spring #spring-boot #спящий режим #file-io

Вопрос:

 public void storeEmployeeImageDetails(String folderPath, List<Employee> listEmp) {
        try {
            for (Employee emp : listEmp) {
                Blob image;
                String imageType;
                image = emp.getImageBlob();
                imageType = emp.getImageType();
                String empId = emp.getEmployeeID();

                if (!"".equals(imageType) amp;amp; image != null) {
                    String type = imageType.substring(1);
                    int blobLength = (int) image.length();
                    byte[] blobAsBytes = image.getBytes(1, blobLength);
                    BufferedImage imageData = ImageIO.read(new ByteArrayInputStream(blobAsBytes));
                    ImageIO.write(imageData, type, new File(folderPath   empId   imageType));
                }
            }
        } catch (SQLException | IOException e) {
            e.printStackTrace();
            logger.error("Exception Occured While Storing Employee Image In Server Folder: "   e);
        }

    }
  

Я получаю ошибку:
исключение java.io.FileNotFoundException: https:example.comhruploadsprofilepics100.jpg (Неверен синтаксис имени файла, каталога или метки тома)

ПРИМЕЧАНИЕ: Здесь путь к папке — это https:\example.com\hr\uploads\profilepics\ то, что я получаю из файла application.properties.

https:\example.com это сервер godaddy, и это PHP-проект. Я пытаюсь сохранить изображения из приложения Java на этот сервер.

Комментарии:

1. Из предоставленного вами небольшого объяснения похоже, что вы хотите сохранить файл где-нибудь в файловой системе на другом сервере. Это не должно быть возможно с использованием http, поскольку, если бы это было так, это было бы дырой в безопасности. Поэтому, даже если вы сможете управлять этим, вам не следует полагаться на это. Взгляните на API этого сервера и на то, что он предоставляет (он может принимать некоторый путь в качестве параметра запроса / публикации).

2. этот URL-адрес не является rest API. Это папка на их сервере. с разрешением на запись.

3. Речь идет не о разрешениях, а о сети.

4. Ну, это не имеет никакого отношения к REST. Если вы хотите использовать HTTP, сервер должен предоставить обработчик конечной точки / http, который мог бы переводить произвольные URL-адреса в локальные пути. Однако ImageIO не сможет этого сделать — вам нужно использовать URL-соединение (в идеале использовать HttpClient, например, как предусмотрено Apache Commons Http) и опубликовать изображение на этот URL.

5. Спасибо за идею, я попробую это.

Ответ №1:

 public class FTPUploader {
    
    FTPClient ftp = null;
    public FTPUploader(String host, String user, String pwd) throws Exception{
        ftp = new FTPClient();
        ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
        int reply;
        ftp.connect(host);
        reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftp.disconnect();
            throw new Exception("Exception in connecting to FTP Server");
        }
        ftp.login(user, pwd);
        ftp.setFileType(FTP.BINARY_FILE_TYPE);
        ftp.enterLocalPassiveMode();
    }
    
    
    public void uploadFile(byte[] localFileFullName, String fileName, String hostDir)
            throws Exception {
        
        try {
            InputStream input = new ByteArrayInputStream(localFileFullName);
            this.ftp.storeFile(hostDir   fileName, input);
        }catch(Exception e) {
            e.printStackTrace();
        }
        
    }

    public void disconnect(){
        if (this.ftp.isConnected()) {
            try {
                this.ftp.logout();
                this.ftp.disconnect();
            } catch (IOException f) {
                // do nothing as file is already saved to server
            }
        }
    }
}