5

私の要件は、1つのクライアントを介してファイルをRESTサービスに送信することです。そのサービスがファイルを処理します。これを実装するためにJerseyAPIを使用しています。しかし、私は多くの記事を検索しましたが、クライアント側からファイルを渡す方法と、RESTサービスがファイルを取得する方法についての情報はありません...これを実現する方法は?

また、RESTサービスを作成するためにサーブレットを使用していません。

4

2 に答える 2

11

クライアント側とサーバー側の両方でJerseyを使用していると仮定すると、拡張できるコードは次のとおりです。

サーバ側:

@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();
    }
}

上記のコードは、マルチパート(ファイル)データのPOSTを受け入れるリソースメソッドを実装しています。また、着信(マルチパート)リクエストのすべての個々のボディパーツを反復処理する方法も示しています。

クライアント:

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>

必要に応じて依存関係のバージョンを調整します

于 2013-03-07T04:28:55.287 に答える
1

MimeMultipartタイプなので、1つだけではなく、複数のファイルや追加情報を文字列などとして送信でき、1つの単純な投稿を行うだけで、さまざまなファイルなどを含む複数のMimeBodyPartを追加するだけでよいと思いますか? ?たとえば、次のようになります。

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);

于 2017-06-04T14:38:41.473 に答える