当前位置: 首页 > 知识库问答 >
问题:

使用ApacheCamel将文件上传到rest服务器

董和泽
2023-03-14

我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。

RESTendpoint在Spring中编写,如下所示:

@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {

    storageService.store(file);
    redirectAttributes.addFlashAttribute("message",
            "You successfully uploaded " + file.getOriginalFilename() + "!");

    return "redirect:/";
}

我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是我尝试过的:

@Component
public class SampleCamelRouter extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        from("file://target/input?delay=4000")
        .process(new Processor() {
                                public void process(Exchange exchange) throws Exception {

                                    File filetoUpload = exchange.getIn().getBody(File.class);
                                    String fileName = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);

                                    MultipartEntityBuilder entity = MultipartEntityBuilder.create();
                                    entity.addTextBody("fileName", fileName);
                                    entity.addBinaryBody("file", filetoUpload);

                                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                                    entity.build().writeTo(out);
                                    InputStream  inputStream = new ByteArrayInputStream(out.toByteArray());
                                    exchange.getIn().setBody(inputStream); 

                                }
                            })
        .setHeader(Exchange.CONTENT_TYPE, constant("multipart/form-data"))
        .setHeader(Exchange.HTTP_METHOD, constant("POST"))
        .to("http://localhost:9090/");
    }

}

但是当我运行这个时,我在rest服务器中得到以下异常:

org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

在camel端,请求失败,出现500错误。

任何线索都是值得赞赏的。

共有1个答案

归鹤龄
2023-03-14

使用头="Content-Type=multipart/form-data",到控制器中。

问题不在代码中,而是在请求中。多部分请求中缺少边界。正如在说明书中所述:

多部分实体的Content-Type字段需要一个参数“boundary”,用于指定封装边界。封装边界被定义为完全由两个连字符(“-”,十进制代码45)组成的一行,后跟Content-Type头字段中的边界参数值。这个和这个帖子应该也有帮助。

 类似资料:
  • 如何将文件发送到WebService?为了上传文件,我需要使用multipart/form-data;我想知道如何使用PHP中的curl来实现这一点。 我的代码是: 服务器上的故障是: 我怎样才能解决这个问题?

  • 问题内容: 实际上,我正在使用带有Angular 2编码的接口的Spring REST API。 我的问题是我无法使用Angular 2上传文件。 我在Java中的Webresources是: 当我通过带有Auth标头等的URL请求调用它时(它具有适用于Chrome的Advanced Rest Client扩展),它完全可以正常工作 证明:(在这种情况下,一切正常) Spring配置文件和Pom依

  • 在Django python服务器上,我定制了一个用户可以上传文件的URL。现在的问题是,当我点击浏览器时,我能够成功地上传文件,但当我使用curl尝试同样的事情时,我无法做到这一点。 意见。派克 ........ ........ ........ ........ 名单。html 在浏览器上 在终点站,我试过了 我尝试了一些其他的变化,但似乎没有成功。我还尝试了一些其他命令,它们给出了“无cs

  • 问题内容: 以下是我用于将文件上传到服务器的代码。但是,即使经过几次尝试,甚至添加了严格模式,我都遇到了网络异常。 我是Android的新手,不知道如何使用异步任务,许多人建议您使用这种异步网络操作。谁能告诉我代码中哪里有错误以及应该在哪里使用异步任务? 问题答案: 有关更多信息,请参考此链接 http://vikaskanani.wordpress.com/2011/01/29/android-

  • 问题内容: 我创建了一个从有权访问的FTP服务器下载文件的功能。如何将文件上传回FTP服务器? 以下是我使用的download_files方法: 问题答案: 使用Apache Commons Net库中的FTPClient类。 这是一个带有示例的代码段: 摘录自http://www.kodejava.org/examples/356.html

  • 我正在构建一个功能,将文件从我的web应用程序上传到我的客户google drive。我不希望应用程序对用户进行身份验证。谁曾经上传过我文件中的任何文件?我想上传到我客户的谷歌硬盘。 我假设服务帐户是用于此目的的帐户。我说得对吗? 当我使用以下代码上传文件时,它会成功上传,但在“我的驱动器”下不可见。然后我添加了一个权限,基本上与我的gmail帐户共享该文件。然后它在“与我共享”部分可见。 我希望