8

マルチパート リクエスト (ファイルのアップロード) を受け取り、ファイルをディスクの場所に保存するために、マルチパートの Jersey REST サービスを以下のように設計しました。

@POST
    @Path("/Upload")
    @Produces(MediaType.TEXT_HTML)
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public String uploadFile(@FormDataParam("file") InputStream inputStream,
            @FormDataParam("file") FormDataContentDisposition contentDisposition) {

        System.out.println("Method Entry");
        System.out.println(contentDisposition.getFileName());


        String result = "not Success";
        File file = null;
        if (contentDisposition != null
                && contentDisposition.getFileName() != null
                && contentDisposition.getFileName().trim().length() > 0) {
            try {
                file = new File("xx"
                        + contentDisposition.getFileName());
                new File("yy").mkdirs();
                file.createNewFile();
                OutputStream outputStream = new FileOutputStream(file);
                int read = 0;
                byte[] bytes = new byte[1024];

                while ((read = inputStream.read(bytes)) != -1) {
                    outputStream.write(bytes, 0, read);
                }
                outputStream.flush();
                outputStream.close();
                result = "success";

            } catch (Exception e) {

                System.out.println(e.toString());
            }
        }
        System.out.println("Method Exit");
        return result;

    }

私のテストクライアントは次のとおりです。

    Client client = Client.create();
    WebResource resource = client
            .resource("xyz");
    String conString = "This is the content";

    FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
    formDataMultiPart.field("file", "Testing.txt");

    FormDataBodyPart bodyPart = new FormDataBodyPart("file",
            new ByteArrayInputStream(conString.getBytes()),
            MediaType.APPLICATION_OCTET_STREAM_TYPE);
    formDataMultiPart.bodyPart(bodyPart);

    String reString = resource.type(MediaType.MULTIPART_FORM_DATA)
            .accept(MediaType.TEXT_HTML)
            .post(String.class, formDataMultiPart);
    System.out.println(reString);

しかし、私は応答を得ることができません。

HTML Web ページをクライアントとして使用して REST サービスを呼び出してファイルをアップロードすると、完全に機能しますが、REST クライアントからは機能しません。

クライアントで変更する必要があるものはありますか?

4

2 に答える 2

14

ファイルがなく、文字列などがある場合の解決策は、次のようにすることです。

final FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
final String value = "Hello World";
final FormDataContentDisposition dispo = FormDataContentDisposition//
        .name("file")//
        .fileName("test.txt")//
        .size(value.getBytes().length)//
        .build();
final FormDataBodyPart bodyPart = new FormDataBodyPart(dispo, value);
formDataMultiPart.bodyPart(bodyPart);
于 2013-08-14T21:57:21.850 に答える
1

返事が来ないというのは、具体的にどういう意味ですか?

ファイルを送信する場合、これで試してみることはできますか?

   FileDataBodyPart fdp = new  FileDataBodyPart("file",f,MediaType.APPLICATION_OCTET_STREAM_TYPE);

また、

   formDataMultiPart.field("file", "Testing.txt");

たとえば、「ファイル」ではなく「ファイル名」という名前にする必要があります。

デバッグについては、Wireshark を使用してサーバーでリッスンすることをお勧めします。

于 2012-08-24T10:14:29.183 に答える