2015-11-07 84 views

回答

7

首先,在您的BuildConfig.groovy(Grails的2.X)公网或的build.gradle(Grails的3.X):

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

+0

你好。非常感谢您的快速帮助。我做了一个快速测试它的工作。 – madhavi

+0

当我从另一个服务调用此服务时,获取异常:ftp.UploadService.connect()适用于参数类型:(groovy.util.ConfigObject)values:[[:]]和单元测试类'grailsApplication'为空 – madhavi

+0

我能够通过用户名,密码......的硬编码值来测试连接,但是当我使用grailsApplication变量时,获得上面的异常。是否有可能在resources.groovy中声明FTPClient?以便我可以从属性文件读取属性,如果是的话,你可以请教。我怎么能声明它。 – madhavi

相关问题