【问题标题】:How to upload file to remote FTP Server in grails如何在 grails 中将文件上传到远程 FTP 服务器
【发布时间】:2016-02-08 19:14:58
【问题描述】:

我是 Grails 框架的新手。我需要通过 Grails 中的批处理应用程序将文本文件上传到远程 FTP 服务器。请求任何人有建议,逐步处理如何连接到远程服务器并上传文件。

提前致谢。

【问题讨论】:

    标签: file grails upload ftp server


    【解决方案1】:

    首先,在您的 BuildConfig.groovy (Grails 2.x) 或 build.gradle (Grails 3.x) 中包含 commons-net:

    compile 'commons-net:commons-net:3.3'

    第二次添加服务:

    class UploadService {
        GrailsApplication grailsApplication
    
        String upload(String fileName, InputStream inputStream) {
            String status
            new FTPClient().with {
                connect grailsApplication.config.getProperty('ftp.host')
                login grailsApplication.config.getProperty('ftp.username'), grailsApplication.config.getProperty('ftp.password')
                enterLocalPassiveMode()
                setFileType(BINARY_FILE_TYPE)
                changeWorkingDirectory grailsApplication.config.getProperty('ftp.uploadDir')
                storeFile(fileName, inputStream)
                status = replyString
                disconnect()
            }
            return status
        }
    }
    

    更新:

    我忘记添加需要进入grails-app/conf/Config.groovy (Grails 2.x) 或grails-app/config/application.groovy 的配置:

    ftp {
        host = 'some.host'
        username = 'myuser'
        password = '*****'
        uploadDir = 'Uploads'
    }
    

    也可以在resources.groovy 中创建 FTPClient() 实例,并改用依赖注入。

    bean = {
        ftpClient(FTPClient)
    }
    

    然后在服务中使用它:

    class UploadService {
         GrailsApplication grailsApplication
         FTPClient ftpClient // Will be injected
    
         String upload(String fileName, InputStream inputStream) {
    
             String status
             ftpClient.with {
                  // Same as above
             }
         }
    }
    

    这将允许您对课程进行单元测试,您只需在其中模拟 FTPClient

    【讨论】:

    • 你好。非常感谢您的快速帮助。我做了一个快速测试,它可以工作。
    • 当我从另一个服务调用此服务时,出现异常:ftp.UploadService.connect() 适用于参数类型:(groovy.util.ConfigObject) 值:[[:]] 和在单元测试类 'grailsApplication' 中为空
    • 我能够通过用户名、密码的硬编码值来测试连接......但是当我使用 grailsApplication 变量时,出现上述异常。是否可以在 resources.groovy 中声明 FTPClient ?这样我就可以从属性文件中读取属性,如果可以,请告诉我如何声明它。
    • 异常:由 MissingMethodException 引起:没有方法签名:com.ftp.UploadService.connect() 适用于参数类型:(groovy.util.ConfigObject) 值:[[:]]跨度>
    • 您的问题不是由@sbglasius 解决方案引起的。您正在尝试从配置中获取一个不存在的值,并将其传递给服务。我建议您接受答案并创建一个新问题。对于您在 Config.groovy 中访问值的问题
    最近更新 更多