Restlet Multitpart表单文件上载失败,出现未知异常

Restlet Multitpart表单文件上载失败,出现未知异常,rest,file-upload,client,multipartform-data,restlet,Rest,File Upload,Client,Multipartform Data,Restlet,我尝试使用restlet客户端模拟表单提交,附带文件和一些参数。从浏览器提交的数据来看,服务器工作正常,但问题是当尝试使用restlet进行上传时,它失败了 上传代码为。为了可读性,我删除了验证和异常处理 ClientResource cr = new ClientResource(targetUrl); cr.setCookies(cookie); FormDataSet form = new FormDataSet(); form.getEntries().add(new FormData(

我尝试使用restlet客户端模拟表单提交,附带文件和一些参数。从浏览器提交的数据来看,服务器工作正常,但问题是当尝试使用restlet进行上传时,它失败了

上传代码为。为了可读性,我删除了验证和异常处理

ClientResource cr = new ClientResource(targetUrl);
cr.setCookies(cookie);
FormDataSet form = new FormDataSet();
form.getEntries().add(new FormData("title", request.getTitle()));

File f = new File(request.getFilePath());
FileRepresentation file = new FileRepresentation(f,MediaType.MULTIPART_FORM_DATA);
FormData fd = new FormData("upload_file", file); 
form.getEntries().add(fd);
form.setMultipart(true);

Representation responseObject = cr.post(form); 
但是服务器抱怨请求中缺少内容大小

org.apache.commons.fileupload.FileUploadBase$UnknownSizeException:请求被拒绝,因为其大小未知

在上面的代码中我做错了什么。 仅供参考,服务器也是使用restlet编写的,并遵循代码示例

我发现了一个restlet博客,它有一些替代方法。但它们引用了一个类“MultipartRepresentation”,我在restlet发行版中找不到它。在这里,我可能丢失了一个扩展jar文件,但仍然找不到这样的文件


如果有任何帮助,我们将不胜感激。

我使用Restlet 2.3.1中的代码进行了测试,无法重现您的问题

以下是它生成的请求的内容:

POST /upload HTTP/1.1
Accept-Encoding: gzip
User-Agent: Jetty/9.2.6.v20141205
Date: Thu, 05 Nov 2015 15:48:31 GMT
Content-Type: multipart/form-data; boundary=---Aa1Bb2Cc3---
Accept: */*
Host: localhost:8182
User-Agent: Restlet-Framework/2.3.1
Content-Length: 248

-----Aa1Bb2Cc3---
Content-Disposition: form-data; name="title"

request.getTitle()
-----Aa1Bb2Cc3---
Content-Disposition: form-data; name="upload_file"; filename="test.txt"
Content-Type: multipart/form-data

some text
-----Aa1Bb2Cc3-----
以下是我在测试项目中的依赖项:

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet</artifactId>
    <version>${restlet-version}</version>
</dependency>

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet.ext.jetty</artifactId>
    <version>${restlet-version}</version>
</dependency>

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet.ext.fileupload</artifactId>
    <version>${restlet-version}</version>
</dependency>

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet.ext.html</artifactId>
    <version>${restlet-version}</version>
</dependency>

org.restlet.jse
org.restlet
${restlet版本}
org.restlet.jse
org.restlet.ext.jetty
${restlet版本}
org.restlet.jse
org.restlet.ext.fileupload
${restlet版本}
org.restlet.jse
org.restlet.ext.html
${restlet版本}
您能否提供更多关于您使用的确切依赖关系以及发送请求的内容的详细信息

我想它可以链接到您使用的客户机扩展(默认扩展?)。在我的例子中,我使用了码头扩建处的一个

谢谢!
Thierry

我使用您的代码和Restlet 2.3.1进行了测试,我无法重现您的问题

以下是它生成的请求的内容:

POST /upload HTTP/1.1
Accept-Encoding: gzip
User-Agent: Jetty/9.2.6.v20141205
Date: Thu, 05 Nov 2015 15:48:31 GMT
Content-Type: multipart/form-data; boundary=---Aa1Bb2Cc3---
Accept: */*
Host: localhost:8182
User-Agent: Restlet-Framework/2.3.1
Content-Length: 248

-----Aa1Bb2Cc3---
Content-Disposition: form-data; name="title"

request.getTitle()
-----Aa1Bb2Cc3---
Content-Disposition: form-data; name="upload_file"; filename="test.txt"
Content-Type: multipart/form-data

some text
-----Aa1Bb2Cc3-----
以下是我在测试项目中的依赖项:

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet</artifactId>
    <version>${restlet-version}</version>
</dependency>

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet.ext.jetty</artifactId>
    <version>${restlet-version}</version>
</dependency>

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet.ext.fileupload</artifactId>
    <version>${restlet-version}</version>
</dependency>

<dependency>
    <groupId>org.restlet.jse</groupId>
    <artifactId>org.restlet.ext.html</artifactId>
    <version>${restlet-version}</version>
</dependency>

org.restlet.jse
org.restlet
${restlet版本}
org.restlet.jse
org.restlet.ext.jetty
${restlet版本}
org.restlet.jse
org.restlet.ext.fileupload
${restlet版本}
org.restlet.jse
org.restlet.ext.html
${restlet版本}
您能否提供更多关于您使用的确切依赖关系以及发送请求的内容的详细信息

我想它可以链接到您使用的客户机扩展(默认扩展?)。在我的例子中,我使用了码头扩建处的一个

谢谢! 蒂埃里