File 如何在grails中将文件上载到远程FTP服务器

File 如何在grails中将文件上载到远程FTP服务器,file,grails,upload,ftp,server,File,Grails,Upload,Ftp,Server,我是Grails框架的新手。我需要通过Grails中的批处理应用程序将文本文件上传到远程FTP服务器。如果有人提出建议,请提出请求,逐步了解如何连接到远程服务器并上载文件 提前感谢。首先,在BuildConfig.groovy(Grails 2.x)或build.gradle(Grails 3.x)中包含commons net: 编译“commons-net:commons-net:3.3” 其次,添加一项服务: class UploadService { GrailsApplicati

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


提前感谢。

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

编译“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

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

编译“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

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