发送文件作为参数传递给一个REST服务,从客户端?(Send File as a parameter

2019-08-17 08:50发布

我的要求是通过一个客户端的文件发送到REST服务。 这项服务是要处理的文件。 我使用的API新泽西州实现这一点。 但找遍了许多文章,不存在如何从客户端传递文件 和REST服务将如何检索文件的任何信息......如何实现这一点?

而且我不使用的Servlet创建REST服务。

Answer 1:

假设你在客户端和服务器端都使用泽西岛,这里是一些代码,你可以扩展:

服务器端:

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

上面的代码简单地将文件附加到一个多部分请求,并触发请求断开到服务器。 对于客户端和服务器端代码存在泽西和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>

调整依赖版本要求



Answer 2:

我说得对假设,因为它是一个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);

等等



文章来源: Send File as a parameter to a REST Service, from a client?
标签: java rest jersey