Файл получает полный путь к локальному исходному файлу в качестве имени при загрузке с помощью Java FTPClient.

Итак, у меня есть базовое приложение с графическим интерфейсом, в котором есть возможность загружать файлы изображений на ftp-сервер. Все работает нормально, кроме одного: файлы переименовываются во время загрузки. Новое имя файла будет полным путем к каталогу, в котором находится файл.

Итак, в моем случае у меня есть изображение на рабочем столе: C:\Users\Bob\Desktop\image.png. Когда я выбираю файл в JfileChooser, имя по-прежнему просто image.png. Но когда я нажму «Загрузить на FTP-сервер», файл будет переименован в C:\Users\Bob\Desktop\image.png. Поэтому, если я хочу загрузить этот файл, я должен использовать этот путь: /home/user/users/xy/images/C:\Users\Bob\Desktop\image.png, чтобы загрузить его. Не знаю, что вызывает эту проблему. Я использую FTPClient.putFileToPath(file,path) для загрузки файлов, и он отлично работает, файлы будут загружены. Я попытался скопировать файл с моей машины на ftp-сервер с помощью Total Commander, и эта проблема никогда не возникала. Я предоставил фрагмент кода, который выполняет загрузку.

uploadmenu.getUploadBtn().addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        if(!uploadMenuValidate()){
           for(File f : img_container){
            try {
                //This still gives me the normal file name
                System.out.println(f.getName()); 
                
                ftp.putFileToPath(f, FtpClient.DEST_DIR+SQLData.APP_USERNAME+"/"+f);

                 
            } catch (IOException ex) {
                ex.printStackTrace();
                }
            }
           popup.setVisible(false);
        }
    }
});

У меня есть все файлы в массиве img_container, которые я выбрал в массиве JFileChooser.


person NeverSayEver    schedule 29.03.2021    source источник


Ответы (1)


File.toString() возвращает:

Возвращает строку пути этого абстрактного имени пути

Вы хотите использовать File.getName():

ftp.putFileToPath(f, FtpClient.DEST_DIR+SQLData.APP_USERNAME+"/"+f.getName());
person Martin Prikryl    schedule 29.03.2021
comment
Ах, господи, какая ошибка... хз, как я этого не заметил... В любом случае, спасибо, что выручил меня! - person NeverSayEver; 29.03.2021