2015-08-12 9 views
8

Arka uçta jax-rs ile açısal ham yapmak için bir sorunla karşı karşıyayım. Hamur çok basit, bazı metin alanları ve bir görüntü alanı.Resim ve verileri aynı istek üzerine açısal ve heceli olarak nasıl yükleyebilirim?

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

Ve html tabakasında:

<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> 

Yani, benim sorum ben böyle bir adımda bunu nasıl olduğunu

ben kod resim yüklemek için çalışıyoruz vardır:

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

Yukarıdaki kodu görüntü katmanından çağırmaya çalışırsam, veriye çöp bulamayan bir hata verir. MyEntity parametresiyle d.

[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 

Bunu nasıl yapacağımı bilen biri var mı? Ya da iki adımda yapsam mı?

+0

Hiçbir şey bu konuda angularjs .. bu kadar – tariksbl

cevap

13

Teknik olarak, her iki veri parçasını da MultipartFormDataInput'dan alabilirsiniz. Eğer bir POJO içine her şeyi koymak istiyorsanız Örneğin, size kaynak yönteminde O zaman bu

public class MyEntity { 

    @FormParam("firstname") 
    private String firstname; 

    @FormParam("lastname") 
    private String lastname; 

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

    // Getter and Setters 
} 

gibi bir şey yapabilirsiniz

<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(); 
} 

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

daha bakınız:

+0

, benim için mükemmel ikincisi çalışmalarını. Teşekkürler! – fdam

İlgili konular