2013-03-07 4 views
4

Мое требование - отправить файл в службу REST через одного клиента. Эта служба будет обрабатывать файл. Я использую API Джерси для реализации этого. Но я искал во многих статьях, нет никакой информации от , как передать файл с клиентской стороны и , как служба REST будет извлекать файл ... Как это сделать?Отправлять файл в качестве параметра в службу REST от клиента?

И я не использую сервлеты для создания службы REST.

+1

вы проверили ссылку.? http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/ – KSHiTiJ

+0

Thak вам эта ссылка полезна. Но в этой ссылке есть информация о том, как служба получает файл и как он загружает только файл. Моим требованием является то, как клиент будет называть этот файлUploadservice посредством отправки файла в качестве параметра .. то есть файл находится на стороне клиента. Он отправит файл в службу REST для какой-либо цели. –

ответ

9

Предполагая, что вы используете Джерси на клиенте и на стороне сервера, вот код, который вы можете расширить:

стороне сервера:

@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> 

Adjust версии зависимостей, необходимых

+0

Большое спасибо ... Это то, чего я действительно ожидал. Не могли бы вы сказать Maven зависимость MimeMulitpart .. Я использую следующие действия DEPENDENCY \t \t \t com.sun.jersey.contribs \t \t \t Джерси-многочастному \t \t \t 1.17.1 \t \t ... Правильно ли это? –

+0

@AnandMurugan - нет, вам не нужна эта зависимость. Я добавил основные, которые вам нужны для моего ответа. – Perception

+0

Я изменил изменения кода. Но теперь я получаю исключение из 404 Не найден ... Но когда я нажимаю URL-адрес, он отвечает ...Но опять же после выполнения поста происходит экспрессия ... Моя служба работает в URL http: // myhost/agent. Я добавил @Path («/ upload») в Service Class, а также добавил @Path («передача») в методе uploadFile .... Снова хочу знать, что такое «Неправильно с кодом»? –

0

Я прав, предположив, так как его тип MimeMultipart, что я не мог просто отправить один, но несколько файлов или дополнительную информацию, возможно, как String или что-то еще, делая только одну простую запись, просто добавляя несколько 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); 

т.д.