Derzeit verwende ich org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput für den Datei-Upload. Ich möchte es durch ein generisches Java EE Design ersetzen. Bitte schlagen Sie Möglichkeiten vor, um eine Datei zusammen mit einigen anderen Formulardaten mit den Java EE 7-Spezifikationen hochzuladen.Wie implementiert man Datei-Upload zusammen mit einigen Formulardaten, mit Java EE 7-Spezifikationen?
Antwort
Der Java EE 7 hat sich auf RESTful Webservices konzentriert. Also, um etwas zu tun, das dem Ansatz der Spezifikation entspricht, benutze weiterhin JAX-RS 2.0 API:
Hier möchtest du eine Datei in deine App hochladen => du willst eine DATEI an deinen JAX-RS senden. Ihre Methode kann wie folgt sein:
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
//Your local disk path where you want to store the file
String uploadedFileLocation = "D://uploadedFiles/" + fileDetail.getFileName();
System.out.println(uploadedFileLocation);
// save it
File objFile=new File(uploadedFileLocation);
if(objFile.exists())
{
objFile.delete();
}
try {
OutputStream out = null;
int read = 0;
byte[] bytes = new byte[1024];
out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
String output = "File uploaded via JAX-RS based RESTFul Webservice to: " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
Dies ist ein Java EE 7 kompatible Datei hochladen JAX-RS-Service.
@ FormDataParam ist innerhalb von jersey-multipart-api verfügbar und daher eine Implementierung von Drittanbietern. Ich möchte eine Implementierung basierend auf JAX-RS mit javax.ws APIs. Gibt es generische Spezifikationen, die sowohl mit Resteasy als auch mit Jersey kompatibel sind? –
Jersey Framework ist die JAX-RS Referenzimplementierung. Resteasy ist eine weitere Implementierung von JAX-RS. Resteasy behandelt die MultiPartData nicht anders: http://docs.jboss.org/resteasy/docs/2.3.4.Final/userguide/html/Multipart.html#MultipartFormData Wenn Sie "tragbaren" Code zwischen Jersey machen wollen & Resteasy, ich denke, das ist eigentlich nicht möglich. –
@JsonBourne Das ist genau was ich will, ich möchte einen Code unabhängig von der Implementierung, Code, der mit RestEasy und Jersey laufen sollte. Portabler Code, wie Sie richtig angemerkt haben. –
Ich neige dazu, Dateiuploads mit einem regulären Servlet selbst noch zu behandeln. Die Servlet 3.0-Spezifikation (seit JEE6) hat mehrteilige Handling-Unterstützung von Anfang an hinzugefügt. Ist das im Rahmen der Frage oder muss es auf JAX-RS basieren? – Gimby
Was wir versuchen zu tun ist, wir versuchen, die Dateiinformationen von der Anfrage ohne Verwendung von Drittanbieter-APIs zu erhalten. Machen Sie das mit Code/Implementierung? Wenn ja, können Sie Ihren Code/Ihre Idee teilen? –
Ich nehme das als ein Ja. – Gimby