我正在开发一个 servlet,我们在 DB 中存储了一个 FTP URI。用户将选择一个 FTP URI(通过“友好”名称),然后从站点上传一个文件。我想使用 Camel 进行实际上传,因为我们存储的 URI 以前在骆驼端点中使用过。
这是与文件一起发送消息的代码:
public void uploadValidFiles(List<ValidatedFile> files, UploadLocationInfo info)
{
final String uri = info.getUri();
RouteBuilder rb = new RouteBuilder() {
public void configure() {
from("direct:start").to(uri);
}
};
CamelContext ctx = new DefaultCamelContext();
try {
ctx.addRoutes(rb);
ctx.start();
ProducerTemplate prod = new DefaultProducerTemplate(ctx);
prod.start();
for(ValidatedFile file : files)
{
File temp = File.createTempFile(file.getFilename(), ".tmp");
//Transfer MultiPartFile to File
file.getFile().transferTo(temp);
prod.sendBodyAndHeader("direct:start", temp, "CamelFileName", file.getFilename());
}
prod.stop();
ctx.stop();
}
catch (CamelExecutionException ce)
{
System.out.println("Problem!");
throw new RuntimeException(ce);
}
}
我正在测试的 URI 是:ftp://user@ftp.domain.com/folder?password=s3cr3t
在我选择 URI 和文件的网站上,我点击 Upload... 然后它就挂了。最终我得到一个带有文本的 HTTP500:
HTTP 状态 500 - 请求处理失败;嵌套异常是 java.lang.RuntimeException:org.apache.camel.CamelExecutionException:在交换执行期间发生异常:Exchange [消息:[Body is file based:PATH\FILE.tmp]]
在我的 servlet 日志中,我看到:
org.apache.commons.net.ftp.FTPConnectionClosedException:连接关闭,没有任何指示。
在 FTP 上创建了一个文件,其名称为上传文件的名称,但其大小为 0