1

我有一个带有动态数量的<input type='file' />文件和文本框的 html 表单<input type='text' />。我怎样才能在球衣后端获取所有这些数据?..我已经为这样的静态输入数量完成了它:

@POST
    @Path("post")
    @Consumes("multipart/form-data")
public Response postCategory(@FormDataParam("text1") String text1,FormDataMultiPart  fm,
            @FormDataParam("file1") InputStream file1,
            @FormDataParam("text2") String text2,
            @FormDataParam("file2") InputStream file2) {

        System.out.println("CategoryService.postCategory()");
        System.out.println("text1:" + text1);
        System.out.println("text2:" + text2);

    }
4

3 回答 3

3

您可以使用 FormDataMultiPart 通过字段名称或字段索引获取所有表单字段值:

    @POST
    @Consumes("multipart/form-data")
    public Response create(FormDataMultiPart multiPart ) {

        String text1 = multiPart.getField("text1").getEntityAs(String.class);
        byte[] file1 = multiPart.getField("file1").getEntityAs(byte[].class);

        String text2 = multiPart.getBodyParts().get(2).getEntityAs(String.class);
        byte[] file2 = multiPart.getBodyParts().get(3).getEntityAs(byte[].class);

        return Response.ok().build();
    }
于 2012-12-10T02:30:40.840 回答
1

可能这就是您要寻找的东西:

  @POST
  @Consumes("application/x-www-form-urlencoded")
  public void post(MultivaluedMap<String, String> formParams) {

  }

一旦你有了它,Map那么你几乎可以做任何事情。您可以连接file + i并检查地图是否包含该键,如果是,则取值直到i地图中没有此类键的位置。

于 2012-12-09T18:28:28.417 回答
0

希望下面的代码会有所帮助。

@POST
@Path("/fileupload")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
        final FormDataMultiPart multiPart) {
    Map<String,List<FormDataBodyPart>> formFields = multiPart.getFields();
    try {
        dir = "/yourdir/";

        for (Map.Entry<String,List<FormDataBodyPart>> e : formFields.entrySet()) {
            String fieldname = e.getKey(); // Field name of the form, you can add or check the form name here
            List<FormDataBodyPart> bodyParts= e.getValue();
            if (bodyParts != null) {
                for (int i = 0; i < bodyParts.size(); i++) {
                    BodyPartEntity bodyPartEntity = (BodyPartEntity) bodyParts.get(i).getEntity();
                    String fileName = bodyParts.get(i).getContentDisposition().getFileName();
                    String path = dir + File.separator + fileName;
                    // you'r own file IO Utility 
                    FileIOUtil.writeToFile(bodyPartEntity.getInputStream(), path);
                }
            }
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
    // ... ... ... building response

祝你好运

于 2018-09-17T01:02:56.210 回答