2015-11-03 66 views
1

我嘗試使用restlet客戶機模擬附件和一些參數的表單提交。從瀏覽器提交服務器工作正常,但問題是當試圖上傳使用restlet它失敗。Restlet多部分表單文件上傳失敗,出現UnknownSizeException

上傳代碼是。爲了便於閱讀,我刪除了驗證和異常處理。

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編寫,並遵循代碼示例here

我發現了一個restlet博客,它有一些替代方法here。但是他們提到了一個類「MultipartRepresentation」,我無法在restlet分發中找到它。在這裏我可能會遺漏一個擴展jar文件,但我仍然無法找到這樣的。

任何幫助將appriciated

回答

0

我做了使用你的代碼的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> 

你能否提供更多的細節和發送的請求的內容?

我想它可能會鏈接到您使用的客戶端擴展(默認的?)。在我的情況下,我使用了碼頭擴展中的一個...

謝謝! Thierry