获取平针后端的所有输入文件

时间:2012-12-09 15:02:12

标签: java forms post input jersey

我有一个动态编号为<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);

    }

3 个答案:

答案 0 :(得分: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();
    }

答案 1 :(得分:1)

这可能就是你要找的东西:

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

  }

一旦你拥有了Map,那么你几乎可以做任何事情。您可以连结file + i并检查地图是否包含该密钥,如果是,则将值增加到地图中没有此类密钥的i

答案 2 :(得分: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

祝你好运