我正在尝试连接到远程FTP服务器并尝试将文件上传到服务器,但我会得到此错误

问题描述 投票:0回答:0
public class DynamicFtpSessionFactory { private final ApplicationContext context; public DynamicFtpSessionFactory(@NonNull final ApplicationContext context) { this.context = context; } public void registerFtpSessionFactory(@NonNull final String beanName, @NonNull final String host, final int port, @NonNull final String username, @NonNull final String password) { final BeanDefinitionRegistry registry = (BeanDefinitionRegistry) ((AnnotationConfigApplicationContext) context).getBeanFactory(); final BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(DefaultFtpSessionFactory.class); builder.addPropertyValue("host", host); builder.addPropertyValue("port", port); builder.addPropertyValue("username", username); builder.addPropertyValue("password", password); builder.addPropertyValue("fileType", FTP.ASCII_FILE_TYPE); registry.registerBeanDefinition(beanName, builder.getBeanDefinition()); // Optionally wrap in a CachingSessionFactory final DefaultFtpSessionFactory ftpSessionFactory = (DefaultFtpSessionFactory) context.getBean(beanName); registry.registerBeanDefinition(beanName, BeanDefinitionBuilder.genericBeanDefinition(CachingSessionFactory.class) .addConstructorArgValue(ftpSessionFactory) .getBeanDefinition()); } }

服务:
public void uploadFileForGroupId(@NonNull final String groupId, @NonNull final Resource reportFile) throws IOException {
        final CachingSessionFactory session = getFtpSessionFactory(groupId);

        // Upload report file to FTP server
        try (InputStream inputStream = reportFile.getInputStream()) {
            session.getSession().write(inputStream, reportFile.getFilename());
            log.info("File {} uploaded successfully for group Id {}.", reportFile.getFilename(), groupId);
        } catch (IOException e) {
            log.error("Failed to upload file: ", e);
        } finally {
            session.getSession().close();
        }
    }

private CachingSessionFactory getFtpSessionFactory(@NonNull final String groupId) {
        final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.refresh();  // Initialize the context without any configuration class
        final String ftpBeanName = groupId + "Caching";
        if (context.containsBean(ftpBeanName)) {
            return context.getBean(ftpBeanName, CachingSessionFactory.class);
        }
        final DynamicFtpSessionFactory dynamicFtpSessionFactory = new DynamicFtpSessionFactory(context);

        final AnfDirectoryEntity anfDirectory = getFtpConnectionDetails(groupId);
        dynamicFtpSessionFactory.registerFtpSessionFactory(ftpBeanName,
                anfDirectory.getSftpConnection().getSftpServer(),
                FTP_PORT,
                anfDirectory.getSftpConnection().getSftpUser(),
                anfDirectory.getSftpConnection().getSftpPassword());

        return context.getBean(ftpBeanName, CachingSessionFactory.class);
}

i我能够使用FTP命令从我的计算机上传到FTP服务器上传文件。因此,如果我能够通过FTP命令上传,为什么不从Java应用程序中上传?

450是一个FTP响应代码,表明已经发生了瞬态(4xxx)文件系统(X5X)错误。很难说出的基本问题可能是服务器上的文件权限,或者耗尽了空间。我不认为您的代码是问题所在,尽管很难说,因为我们不知道该FTP客户端库的实现是什么。
    

java spring spring-boot ftp
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.