我的要求是通過一個客戶端將文件發送到REST服務。該服務將處理該文件。我正在使用Jersey API來實現這一點。但我已經在很多文章中搜索過,沒有任何有關的信息如何從客戶端傳遞文件和REST服務如何檢索文件 ...如何實現這一目標?從客戶端將文件作爲參數發送到REST服務?
而我沒有使用Servlets創建REST服務。
我的要求是通過一個客戶端將文件發送到REST服務。該服務將處理該文件。我正在使用Jersey API來實現這一點。但我已經在很多文章中搜索過,沒有任何有關的信息如何從客戶端傳遞文件和REST服務如何檢索文件 ...如何實現這一目標?從客戶端將文件作爲參數發送到REST服務?
而我沒有使用Servlets創建REST服務。
假設你在客戶端和服務器端都使用澤西島,這裏是一些代碼,你可以擴展:
服務器端:
@POST
@Path("/")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(final MimeMultipart file) {
if (file == null)
return Response.status(Status.BAD_REQUEST)
.entity("Must supply a valid file").build();
try {
for (int i = 0; i < file.getCount(); i++) {
System.out.println("Body Part: " + file.getBodyPart(i));
}
return Response.ok("Done").build();
} catch (final Exception e) {
return Response.status(Status.INTERNAL_SERVER_ERROR).entity(e)
.build();
}
}
上面的代碼實現了接受郵政的資源方法多部分(文件)數據。它還說明了如何迭代傳入(多部分)請求中的所有單個正文部分。
客戶:
final ClientConfig config = new DefaultClientConfig();
final Client client = Client.create(config);
final WebResource resource = client.resource(ENDPOINT_URL);
final MimeMultipart request = new MimeMultipart();
request.addBodyPart(new MimeBodyPart(new FileInputStream(new File(
fileName))));
final String response = resource
.entity(request, "multipart/form-data")
.accept("text/plain")
.post(String.class);
上面的代碼簡單地將文件附加到一個多部分請求,並觸發請求斷開到服務器。對於客戶端和服務器端代碼,都依賴Jersey和JavaMail庫。如果您正在使用Maven,這些可以很容易地拉下來,用下面的依賴關係:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.17</version>
</dependency>
<dependency> <!-- only on server side -->
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.14</version>
</dependency>
<dependency> <!-- only on client side -->
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.17</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.6</version>
</dependency>
調整依賴版本要求
非常感謝你......這是我真正期望的。你能告訴MimeMulitpart的Maven的依賴..我用下面的依賴
@AnandMurugan - 不,你不需要依賴。我已經將你需要的核心部分添加到了我的答案中。 – Perception 2013-03-07 05:19:01
我更改了代碼更改。但現在我得到404未找到的例外...但是,當我點擊URL時,它響應...但是,在執行post之後,再次發生excpetion ...我的服務正在url http:// myhost/agent中運行。我在Service Class中添加了@Path(「/ upload」),並在uploadFile方法中添加了@Path(「transfer」)....再次想知道代碼中的錯誤是什麼? – 2013-03-07 12:48:37
我說得對假設,因爲它是一個MimeMultipart的類型,我不能只發送一個,但多個文件或附加信息可能是字符串或其他,只做一個簡單的帖子,只需添加多個包含不同文件的MimeBodyParts?例如像:
final MimeMultipart request = new MimeMultipart();
request.addBodyPart(new MimeBodyPart(new FileInputStream(new File(
fileOne))), 0);
request.addBodyPart(new MimeBodyPart(new FileInputStream(new File(
fileTwo))), 1);
等
你檢查下面的鏈接? http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/ – KSHiTiJ 2013-03-07 04:20:09
謝謝你這個鏈接是有用的。但是在這個鏈接中有服務獲取文件的方式以及如何上傳文件的信息。我的要求是客戶端將如何通過發送文件作爲參數調用此fileUploadservice ..這是文件在客戶端。它會將文件發送到REST服務用於某種目的。 – 2013-03-07 04:33:45