Java Apache Camel Restlet-无法提取多部分数据

Java Apache Camel Restlet-无法提取多部分数据,java,apache-camel,multipartform-data,restlet,Java,Apache Camel,Multipartform Data,Restlet,我必须使用ApacheCamel(2.12.4)Restlet从浏览器和进程接收文件上载。由于我的解决方案不起作用,为了简化,目前我一直保持我的路线定义非常简单 from("restlet:/upload?restletMethod=POST") .to("file:///<path.to.dir>//?fileName=<dump-file.http>"); from(“restlet:/upload?restlemethod=POST”) .至(”file:////

我必须使用ApacheCamel(2.12.4)Restlet从浏览器和进程接收文件上载。由于我的解决方案不起作用,为了简化,目前我一直保持我的路线定义非常简单

from("restlet:/upload?restletMethod=POST")
.to("file:///<path.to.dir>//?fileName=<dump-file.http>");
from(“restlet:/upload?restlemethod=POST”)
.至(”file://///?fileName=");
使用Postman,我上传了一个简单的java类文件和表单值,目标是将它们都检索回来。我希望能够将类文件写回文件并执行,以证明创建成功

为此,我编写了一个简单的实用工具,它使用org.apache.commons.fileupload.MultipartStream读取转储文件;现在是打印页眉和正文

public class MultipartDataExtractor {

    public static final String DELIMITER = "\\r?\\n";

    public static void main(String[] args) throws Exception {
        byte[] boundary = "----------------------------002984755777142240671505".getBytes(); // copying from dump file
        FileInputStream fis = new FileInputStream(new File("<path.to.dir>/<dump-file.http>"));
        parseMultipartStream(fis, boundary);
    }

    public static void parseMultipartStream(InputStream is, byte[] boundary) throws Exception {
        MultipartStream multipartStream = new MultipartStream(is, boundary, 1024 * 4, null);
        System.out.println("Trying to read multipart data");
        boolean nextPart = multipartStream.skipPreamble();
        while (nextPart) {
            String headers = multipartStream.readHeaders();
            System.out.println(String.format("headers: [%s]", headers));
            multipartStream.readBodyData(System.out);
            System.out.println("");
            nextPart = multipartStream.readBoundary();
        }
    }
}
公共类多部分数据提取器{
公共静态最终字符串分隔符=“\\r?\\n”;
公共静态void main(字符串[]args)引发异常{
byte[]boundary=“------------------------------------00298477777142240671505”.getBytes();//从转储文件复制
FileInputStream fis=新FileInputStream(新文件(“/”);
parseMultipartStream(fis,边界);
}
公共静态void parseMultipartStream(InputStream为,字节[]边界)引发异常{
MultipartStream MultipartStream=新的MultipartStream(is,boundary,1024*4,null);
System.out.println(“尝试读取多部分数据”);
布尔值nextPart=multipartStream.skippStream();
while(下一部分){
String headers=multipartStream.readHeaders();
System.out.println(String.format(“头:[%s]”,头));
multipartStream.readBodyData(System.out);
System.out.println(“”);
nextPart=multipartStream.readBoundary();
}
}
}
我在从servlet提取内容创建的文件上成功地使用了该工具。在驼峰转储的文件上,它运行,但即使内容看起来很正常,也无法解析。multipartStream.skipPreamble()在调试时返回false,在内部抛出一个畸形的dexception,并从catch块返回一个false。转储的文件看起来是这样的

----------------------------002984755777142240671505
Content-Disposition: form-data; name="file"; filename="HelloWorld.class"
Content-Type: application/java-vm

����4

<init>()VCodeLineNumberTablemain([Ljava/lang/String;)V
SourceFileHelloWorld.javaHello World
HelloWorldjava/lang/Objectjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)V   *��
        %   ���



----------------------------002984755777142240671505
Content-Disposition: form-data; name="name"

Hans Muster
----------------------------002984755777142240671505--

------------------------------------002984777142240671505
内容配置:表单数据;name=“file”;filename=“HelloWorld.class”
内容类型:应用程序/java虚拟机
����4.
()VCodeLineNumberTablemain([Ljava/lang/String;)V
SourceFileHelloWorld.javaHello世界
HelloWorldjava/lang/Objectjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)V*��
%   ���
----------------------------002984755777142240671505
内容处置:表单数据;name=“name”
汉斯·穆斯特
----------------------------002984755777142240671505--
我不确定哪里出了问题。任何指示或帮助都将不胜感激