簡體   English   中英

如何在角度和重復的同一請求中上傳圖像和數據?

[英]How can I upload image and data in the same request with angular and resteasy?

我正面臨一個問題,即在后端使用jax-rs進行角度調整。 crud非常簡單,有些文本字段和圖像字段。

我有代碼工作上傳圖像:

@POST
@Consumes("multipart/form-data")
public Response uploadFile(MultipartFormDataInput input) {
    ...
}

並在html層:

<form action="http://localhost:8080/app/api/user" method="post" enctype="multipart/form-data">
   <p>
    Choose a file : <input type="file" name="file" />
   </p>
   <input type="submit" value="Upload" />
</form>

所以,我的問題是如何在這一步中做到這一點:

@POST
@Consumes("multipart/form-data")
public Response save(MultipartFormDataInput input, MyEntity entity) {
    ...
}

如果我嘗試從視圖層調用上面的代碼,那么wildfly會給出一個錯誤,該錯誤沒有找到要與MyEntity參數綁定的數據。

[org.jboss.resteasy.core.ExceptionHandler] (default task-3) failed to execute: javax.ws.rs.NotSupportedException: 
Could not find message body reader for type: class mypackage.MyEntity of content type: multipart/form-data;boundary=----WebKitFormBoundaryRXVvqLpZACPylNgS

有誰知道我該怎么做? 或者說我分兩步走了嗎?

從技術上講,您可以從MultipartFormDataInput獲取兩個數據。 例如

<form action="api/upload" method="post" enctype="multipart/form-data">
    Choose a file : <input type="file" name="file" />
    First name: <input type="text" name="firstname" />
    List name: <input type="text" name="lastname" />
    <input type="submit" value="Upload" />
</form>

@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(MultipartFormDataInput multipart) throws IOException {

    try (InputStream in = multipart.getFormDataPart("file", InputStream.class, null);
         FileOutputStream fos = new FileOutputStream("file.png")) {
        byte[] buff = new byte[1024];
        int count;
        while ((count = in.read(buff)) != -1) {
            fos.write(buff, 0, count);
        }
    }

    String firstname = multipart.getFormDataPart("firstname", String.class, null);
    String lastname = multipart.getFormDataPart("lastname", String.class, null);
    return Response.ok(firstname + ":" + lastname).build();
}

如果你想把所有東西都放到POJO中,你可以做這樣的事情

public class MyEntity {

    @FormParam("firstname")
    private String firstname;

    @FormParam("lastname")
    private String lastname;

    @FormParam("file")
    private byte[] file;

    // Getter and Setters
}

然后在您的資源方法中

@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(@MultipartForm MyEntity entity) throws IOException {

    try (FileOutputStream fos = new FileOutputStream("file.png")) {
        byte[] filebytes = entity.getFile();
        fos.write(filebytes);
    }

    String firstname = entity.getFirstname();
    String lastname = entity.getLastname();
    return Response.ok(firstname + ":" + lastname).build();
}

看更多:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM