[Java] Datei-Upload zusammen mit anderen Objekten in Jersey erholsame Web-Service



Answers

Sie können auf die Bilddatei und Daten aus einem Formular zugreifen, indem Sie MULTIPART FORMDATEN verwenden. Verwenden Sie dazu den folgenden Code.

@POST
@Path("/UpdateProfile")
@Consumes(value={MediaType.APPLICATION_JSON,MediaType.MULTIPART_FORM_DATA})
@Produces(value={MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
public Response updateProfile(
    @FormDataParam("file") InputStream fileInputStream,
    @FormDataParam("file") FormDataContentDisposition contentDispositionHeader,
    @FormDataParam("ProfileInfo") String ProfileInfo,
    @FormDataParam("registrationId") String registrationId) {

    String filePath= "/filepath/"+contentDispositionHeader.getFileName();

    OutputStream outputStream = null;
    try {
        int read = 0;
        byte[] bytes = new byte[1024];
        outputStream = new FileOutputStream(new File(filePath));

        while ((read = fileInputStream.read(bytes)) != -1) {
            outputStream.write(bytes, 0, read);
        }

        outputStream.flush();
        outputStream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (outputStream != null) { 
            try {
                outputStream.close();
            } catch(Exception ex) {}
        }
    }
}
Question

Ich möchte eine Mitarbeiterinformation im System erstellen, indem ich ein Bild zusammen mit den Mitarbeiterdaten hochlade. Ich kann es mit verschiedenen Restanrufen mit Trikot tun. Aber ich möchte in einem Ruhepol erreichen. Ich stelle unter der Struktur zur Verfügung. Bitte helfen Sie mir in dieser Hinsicht.

@POST
@Path("/upload2")
@Consumes({MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response uploadFileWithData(
        @FormDataParam("file") InputStream fileInputStream,
        @FormDataParam("file") FormDataContentDisposition contentDispositionHeader,
        Employee emp) {

//..... business login

}

Wann immer ich versuche, bekomme ich einen Fehler in Chrome Postman. Die einfache Struktur meines Employee JSON ist unten angegeben.

{
    "Name": "John",
    "Age": 23,
    "Email": "john@gmail.com",
    "Adrs": {
        "DoorNo": "12-A",
        "Street": "Street-11",
        "City": "Bangalore",
        "Country": "Karnataka"
    }
}

Jedoch kann ich es tun, indem ich zwei verschiedene Anrufe mache, aber ich möchte in einem Ruhe-Anruf erreichen, so dass ich die Datei sowie die tatsächlichen Daten des Angestellten erhalten kann.

Bitte um Hilfe in dieser Hinsicht.




Ich habe ein Datei-Upload-Beispiel von

http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/

In meiner Ressourcenklasse habe ich unter Methode

@POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response  attachupload(@FormDataParam("file") byte[] is,
@FormDataParam("file") FormDataContentDisposition fileDetail,
@FormDataParam("fileName") String flename){
attachService.saveAttachment(flename,is);
}

in meinem attachService.java habe ich unter Methode

 public void saveAttachment(String flename,  byte[] is) {
            // TODO Auto-generated method stub
         attachmentDao.saveAttachment(flename,is);

        }

in Dao habe ich

attach.setData(is);
attach.setFileName(flename);

in meinem HBM-Mapping ist wie

<property name="data" type="binary" >
            <column name="data" />
</property>

Dies funktioniert für alle Arten von Dateien wie .PDF, .TXT, .PNG usw.,




Setzen Sie den "Content-Type: multipart / form-data" auf der Client-Seite und das sollte die Aufgabe erledigen




Links