Upload File zu einem Webservice

internet

Top Contributor
Hallo,

ich möchte gerne mit JAX-RS einen Webservice schreiben, der mir eine Datei (i.d.R. ein Bild) entgegennimmt.

Wie muss ich die Methode hier annotieren?
Java:
    @POST
    @Path(/upload)
    @Produces(MediaType.APPLICATION_JSON)
public Response uploadFile(@QueryParam(file) Object myFile,[/CODE]

- was muss als @Produces rein?
- Anstatt ein Objekt vom Typ "Object", was muss ich als @QueryParam hinzufügen?

Generell:
Wie muss der Methodenkopf für das Vorhaben aussehen?
 

mihe7

Top Contributor
was muss als @Produces rein?
Der Typ des Inhalts, der zurückgesendet wird. Beim Upload schickst Du vermutlich nichts zurück, also ist auch keine Produces-Annotation notwendig.

Wie muss der Methodenkopf für das Vorhaben aussehen?
Java:
@POST
public Response uploadFile(InputStream is) /* ggf. throws IOException */ {
    /* InputStream verarbeiten */
    return Response.ok().build();
}
Den Dateinamen könntest Du z. B. als Path-Parameter übergeben, sofern das notwendig ist.
 

Oneixee5

Top Contributor
..oder falls zusätzliche Informationen zur Datei benötigt werden:
Java:
@POST
@Path("/fileupload")  // your Path or URL to call this service
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
        @DefaultValue("true") @FormDataParam("enabled") boolean enabled, // additional data params
        @FormDataParam("file") InputStream inputStream, // file content
        @FormDataParam("file") FormDataContentDisposition fileDetail) { // additional file infos
     //read infos from fileDetail
    String fileName = fileDetail.getFileName();
    System.out.println(fileName);
    ...
 

internet

Top Contributor
..oder falls zusätzliche Informationen zur Datei benötigt werden:
Java:
@POST
@Path("/fileupload")  // your Path or URL to call this service
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
        @DefaultValue("true") @FormDataParam("enabled") boolean enabled, // additional data params
        @FormDataParam("file") InputStream inputStream, // file content
        @FormDataParam("file") FormDataContentDisposition fileDetail) { // additional file infos
     //read infos from fileDetail
    String fileName = fileDetail.getFileName();
    System.out.println(fileName);
    ...

welche Lib verwendest du?
Ich finde kein @FormDataParam, sondern nur @FormParam (javax.ws.rs.FormParam)?
Sollte von Wildfly mitgeliefert werden...
 

internet

Top Contributor
Das dürfte von Jersey / JAX RS kommen:

und wie müsste das bei Wildfly aussehen?

Ebenfalls würde ich gerne 2 Parameter übergeben:
1. InputStream
2. Json Objekt

Sowas wie:

Java:
    public Response uploadFile(
            @FormDataParam InputStream inputStream,
            PicPictureDTO picPictureDTO) {

Das ganze würde ich gerne in Postman testen...
 

internet

Top Contributor
Also Wildfly bringt mit / nutzt RESTeasy oder nicht? Da würde man dann vermutlich auf diese Annotation verzichten. Wenn ich Dich richtig verstanden habe, geht es Dir auch erst einmal nur um den File Upload:



Das wäre da vermutlich mein Ansatz.
Ja, soweit ich weiß kommt da RestEasy mit...

Nein, ich möchte zwei Dinge übergeben - was nun eher das Problem ist...
1. Objekt von meiner Klasse PicPictureDTO (Json - Objekt?)
Java:
 {
        "colorFlag": "NONE",
        "fileName": "Test.jpg"
 }
2. InputStream

Ich hatte auch zunächst überlegt nur das PicPictureDTO zu übergeben, welches dann ein Feld: InputStream inputStream hat, aber das lässt sich wohl nicht mit Postman wirklich testen...

Ich denke so würde es gehen, wenn ich nur das File habe:
1634749519409.png

Problem ist aber nun, dass ich zusätzlich auch noch das PicPictureDTO - Objekt übergeben möchte...
Any ideas?


Edit:
gerade getestet: MultipartFormDataInput finde ich auch nicht in meinem Projekt...
Muss ich hier eine zusätzliche API in mein Maven Projekt aufnehmen?
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Du könntest die Bilder Base64 enkodieren und in das json einbetten. Ist nicht optimal in Bezug auf übertragene Daten, aber u.U. der einfachste Weg.

gerade getestet: MultipartFormDataInput finde ich auch nicht in meinem Projekt...
Muss ich hier eine zusätzliche API in mein Maven Projekt aufnehmen?
Direkt er erste Code-Block im Link von @kneitzel listet die nötigen Dependencies auf.
 

Oneixee5

Top Contributor
Ich arbeite normalerweise nicht mit dem Wildfly. Generell entwickelt man doch aber nicht gegen einen bestimmten Server oder Hersteller. Wir erstellen natürlich auch auf den Hersteller zugeschnittene Konfigurationsdateien. Dies sieht der Standard expliziet vor. Der Rest ist jedoch Sache der Anwendung. Zugegeben ist es eher selten, dass man den Server wechselt. Test, Entwicklung und Produktion laufen bei uns aber oft auf ganz unterschiedlichen Systemen. Meist sind nur Produktion und Vor-Produktion identisch.
 

mihe7

Top Contributor
Das dürfte auch über den Standard funktionieren, indem man für das JAX-RS-Servlet die Multipart-Config angibt.
 

Oneixee5

Top Contributor
Beispiel nutzt ja auch eine konkrete Implementierung
Natürlich bezieht sich mein Beispiel auf ein konkrete Implementierung - aber eine die die Anwendung mitbringt und nicht der Server. Ich wäre bspw. auch auf ewig an die veralteten Bibliotheken des Servers gebunden, wenn ich dessen API verwenden würde. Ich könnte auch nie auf eine DB oder einen Storage zurückgreifen, wenn der Server den Treiber nicht mitliefert. Das ist ja das Konzept von EAR, man wird unabhängig vom Server, dieser muss lediglich dem JEE-Standard entsprechen.
 
K

kneitzel

Gast
Rennt man dann nicht teilweise in Probleme, weil es Überschneidungen gibt?

Du bindest eine Implementierung ein und nutzt es nun auf einem Server, der noch eine andere Implementierung hat (und sei es nur eine ältere?). Damit hast du dann ggf. unterschiedliche Klassen mit gleichem Namen, oder übersehe ich da jetzt etwas?
 

mrBrown

Super-Moderator
Mitarbeiter
Natürlich bezieht sich mein Beispiel auf ein konkrete Implementierung - aber eine die die Anwendung mitbringt und nicht der Server. Ich wäre bspw. auch auf ewig an die veralteten Bibliotheken des Servers gebunden, wenn ich dessen API verwenden würde. Ich könnte auch nie auf eine DB oder einen Storage zurückgreifen, wenn der Server den Treiber nicht mitliefert. Das ist ja das Konzept von EAR, man wird unabhängig vom Server, dieser muss lediglich dem JEE-Standard entsprechen.
Du deployst zusammen mit deiner Anwendung jeweils noch eine JEE-Implementierung und ignorierst die vom Server bereitgestellte? o_O Das führt doch das ganze Application-Server-Konzept ad absurdum?

Bei Datenbank-Treibern etc ist das ja verständlich, die sind ja nicht Teil von JEE – aber grad eine Jax-RS-Implementierung stellt der Server ja extra bereit, hat die mit der restlichen Implementierung integriert, bietet passende Konfigurationen etc...


Das ist ja dann auch eine ganz explizite Entscheidung, nicht gegen den Standard zu entwickeln – warum dann überhaupt JEE?
 

Oneixee5

Top Contributor
Rennt man dann nicht teilweise in Probleme, weil es Überschneidungen gibt?

Du bindest eine Implementierung ein und nutzt es nun auf einem Server, der noch eine andere Implementierung hat (und sei es nur eine ältere?). Damit hast du dann ggf. unterschiedliche Klassen mit gleichem Namen, oder übersehe ich da jetzt etwas?
Eigentlich ist das kein Problem, da man das Classloading beeinflussen kann. Es ist bspw. möglich einzustellen verwende Package xyz ausschließlich aus meiner Anwendung. Als Anfänger ist das etwas gewöhnungsbedürftig weil man solche Fehlermeldungen noch nicht gesehen hat. Wenn man es aber einmal verstanden hat, ist das kein Problem.
 

Oneixee5

Top Contributor
Du deployst zusammen mit deiner Anwendung jeweils noch eine JEE-Implementierung und ignorierst die vom Server bereitgestellte? o_O Das führt doch das ganze Application-Server-Konzept ad absurdum?

Bei Datenbank-Treibern etc ist das ja verständlich, die sind ja nicht Teil von JEE – aber grad eine Jax-RS-Implementierung stellt der Server ja extra bereit, hat die mit der restlichen Implementierung integriert, bietet passende Konfigurationen etc...


Das ist ja dann auch eine ganz explizite Entscheidung, nicht gegen den Standard zu entwickeln – warum dann überhaupt JEE?
Es ist möglich Resourcen und änliches vom Server zu verwenden, z.B.: Datasources, JMX, Mail, Timer etc.. Genauso ist aber möglich z.B.: ein komplett anders JPA zu verwenden als der Server mitbringt. Da ist nichts am Standard vorbei, nur an den Bugs und veralteten Bibliotheken. Der JEE-Standard sieht das IMHO sogar vor. Es kann bestimmt jeder nachvollziehen, wenn man Hibernate kennt und dann auf dem Weblogic landet. Dort wird EclipseLink als JPA verwendet. Im Vergleich zu Hibernate ist das einfach furchtbar und immer hinter den Standard den es eigentlich verspricht. Zumindest war es in der Vergangenheit so. Zum Glück gibt es jetzt Spring Boot - das läuft als EAR auch auf dem Weblogic. Noch besser funktioniert es wenn man ganz auf JEE verzichten kann.
 

LimDul

Top Contributor
Das Problem mit dem Austauschen ist. Wenn man weiß was man tut, geht das. Wenn man es nicht weiß und versucht sich aus Stackoverflow, JBoss Doku & Co das zusammenzukopieren - Good Luck.

Java EE Server sind schwergewichtige Monster mit einem Haufen schwarzer Magie drin, wo man schon genau wissen muss man tut. Der Jboss hat javaee7-api? Du willst aber Microprofile Metrics mit JSON-Ausgabe in einer neueren Version? Pech gehabt, weil die JSON-Libraries die man dafür braucht erst in javaee8 drin sind und es gibt so lustige MethodNotFoundExceptions zur Laufzeit. man läuft da leicht in Probleme rein.

Deswegen bin ich mittlerweile kein Freund mehr von den Schwergewichtigen Java-EE Servern. Sie bringen zu viel mit und es ist zu aufwendig, wenn das nicht passt. Und das man mehr als eine größere Anwendung auf einem JBoss laufen hat ist nach meinem dafürhalten eh die Ausnahme. Sprich es gilt meisten 1 Server = 1 Anwendung. Dann kann ich auch gleich auf Spring Boot oder ähnliches setzen und den Server komplett mitbringen. Dann hab ich wenigstens auch die Gewissheit das über alle Stages die verwendete Software die gleiche ist und nicht in Test JBoss 7.3 und in Produktion 7.1
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
A File Upload programmieren Java Basics - Anfänger-Themen 4
K File Upload JSP Java Basics - Anfänger-Themen 2
Y GUI-File-Upload Java Basics - Anfänger-Themen 3
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
P Erste Schritte SFTP Upload Java Basics - Anfänger-Themen 10
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M FTP Down-/Upload Java Basics - Anfänger-Themen 3
R Upload Servlet: Ausgabe nicht korrekt Java Basics - Anfänger-Themen 2
E FTP upload storeFile() will nicht wie es soll Java Basics - Anfänger-Themen 6
C Fortschrittsanzeige für FTP Upload Java Basics - Anfänger-Themen 6
R Bild Upload Java Basics - Anfänger-Themen 16
J Image upload auf ImageShack,TinyPic usw. Java Basics - Anfänger-Themen 11
B Upload Applet Java Basics - Anfänger-Themen 25
S Upload Applet Java Basics - Anfänger-Themen 6
M FTP Upload Applet - ProgressBar Java Basics - Anfänger-Themen 5
H Upload Applet Java Basics - Anfänger-Themen 3
L FTP-Upload erfolgreich? Java Basics - Anfänger-Themen 3
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
R File.pathSeparator und File.separator Java Basics - Anfänger-Themen 46
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
berserkerdq2 IOstreams, was unterscheidet file von z. B. BufferedWriter? Java Basics - Anfänger-Themen 11
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
A java jar-File Java Basics - Anfänger-Themen 1
E Executable jar file fehler Java Basics - Anfänger-Themen 9
I ZIP File erstellen Java Basics - Anfänger-Themen 10
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
Tom/S File Java Basics - Anfänger-Themen 10
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
A Checkstyle - File contains tab characters Java Basics - Anfänger-Themen 2
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
C File speichern Java Basics - Anfänger-Themen 5
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
K File (png) in Image laden Java Basics - Anfänger-Themen 3
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
Trèfle EXCEL-File Laufwerkunabhängig einbinden. Java Basics - Anfänger-Themen 1
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
K File-Name Vergleich Java Basics - Anfänger-Themen 2
krgewb Runnable JAR File Export Java Basics - Anfänger-Themen 11
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
D Input/Output File exists canRead canWrite Java Basics - Anfänger-Themen 11
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
E War-File Problem mit Eclipse Java Basics - Anfänger-Themen 3
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Email versenden Outlook, attached File, ohne Anmeldung Java Basics - Anfänger-Themen 4
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
K Runable Jar File erstellen Java Basics - Anfänger-Themen 17
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
Kopak'rraf Korruptes zip File. Java Basics - Anfänger-Themen 0
T File für Einstellungen wird nicht geladen Java Basics - Anfänger-Themen 1
S Sounddatei in Jar File integrieren Java Basics - Anfänger-Themen 2
S Index File bauen Java Basics - Anfänger-Themen 5
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
N Email mit Anhang - File not Found Java Basics - Anfänger-Themen 1
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A file.delete funktioniert nicht Java Basics - Anfänger-Themen 15
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
S jar file Java Basics - Anfänger-Themen 19
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
B Dateityp von File bekommen Java Basics - Anfänger-Themen 2
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
I String zu File umwandeln Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben