File 如何在grails中将文件上载到远程FTP服务器
我是Grails框架的新手。我需要通过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
提前感谢。首先,在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中的值