Infostudent
Grünschnabel
Hallo,
ich versuche schon seit mehreren Tagen einen einfachen Datei-Upload mit Jersey und Javascript/JQuery zu erstellen, aber bin bislang immer gescheitert.
Es geht darum, dass der User eine Textdatei auswählt (lokal auf seinem Rechner) und deren Inhalt gelesen und weiterverarbeitet wird. Das Lesen soll serverseitig geschehen, die ausgewählte Datei muss also an das Servlet übergeben werden.
Die Jersey-Klasse hat folgenden Aufbau, den ich grob aus Tutorials entnommen und für Testzwecke vereinfacht habe:
Die uploadFile-Methode soll ein InputStream-Objekt bekommen, das dann mit einem InputStreamReader gelesen werden soll. Mein Problem ist momentan, dass ich nicht genau weiß, wie ich clientseitig ein InputStream-Objekt erzeuge, so dass ich das Servlet korrekt aufrufen kann. Wir haben uns geeinigt, JavaScript bzw. JQuery zu verwenden, daher sieht mein bisheriger Ansatz wie folgt aus:
Die Servletmethode wird hierbei jedoch nicht ausgeführt. Weiß jemand, wie ich ein InputStream-Objekt erstelle, dass ich dann Jersey übergeben kann, so dass es funktioniert?
Ich habe auch in manchen Tutorials gesehen, dass überhaupt kein JS/JQuery verwendet wurde, sondern direkt aus dem Form heraus das Servlet aufgerufen wurde (action="..."). Allerdings gab es dabei bei mir immer einen 404-Fehler und funktioniert hat es ebenfalls nicht.
Ich verwende Apache Tomcat v.7.0 (Windows 64-bit), Java 1.6 und Jersey Version 1.12 (bundle + multipart). Zum Anzeigen verwende ich Firefox 13.0.1. Ich hab leider bisher noch keine Erfahrung mit Webservices, daher ist jede Hilfe sehr willkommen!
Vielen Dank im Voraus!
ich versuche schon seit mehreren Tagen einen einfachen Datei-Upload mit Jersey und Javascript/JQuery zu erstellen, aber bin bislang immer gescheitert.
Es geht darum, dass der User eine Textdatei auswählt (lokal auf seinem Rechner) und deren Inhalt gelesen und weiterverarbeitet wird. Das Lesen soll serverseitig geschehen, die ausgewählte Datei muss also an das Servlet übergeben werden.
Die Jersey-Klasse hat folgenden Aufbau, den ich grob aus Tutorials entnommen und für Testzwecke vereinfacht habe:
Code:
package de.objectmatching.service;
import java.io.InputStream;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import com.sun.jersey.multipart.FormDataParam;
@Path( "/upload")
/**
* Servlet to load the content of the text files and display it in the console.
*
*/
public class ResourceUpload {
@POST
@Consumes( MediaType.MULTIPART_FORM_DATA)
public void uploadFile( @FormDataParam("file") InputStream inputStreamReference) {
System.out.println( "test");
// Read the file...
}
}
Die uploadFile-Methode soll ein InputStream-Objekt bekommen, das dann mit einem InputStreamReader gelesen werden soll. Mein Problem ist momentan, dass ich nicht genau weiß, wie ich clientseitig ein InputStream-Objekt erzeuge, so dass ich das Servlet korrekt aufrufen kann. Wir haben uns geeinigt, JavaScript bzw. JQuery zu verwenden, daher sieht mein bisheriger Ansatz wie folgt aus:
HTML:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<!-- Load JQuery Library -->
<!-- =================== -->
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<!-- Handle Actions -->
<!-- ============== -->
<script type="text/javascript">
$(document).ready( function() {
$("form").submit( function(e){
var file = document.getElementById( 'ref').files[0];
if( file.value.length == 0) {
alert ("Please specify the path to the file to upload!");
} else {
// Call Servlet (pass file):
$.post( "http://127.0.0.1:8080/ObjectMatcher/upload", file);
}
});
});
</script>
</head>
<!-- Form Part -->
<body>
<h1>Object Matching Evaluation</h1>
<br />
<i>Please select a reference alignment, source file and target file.</i>
<br /><br /><br />
<form method="post" enctype="multipart/form-data">
<table border="0">
<colgroup>
<col width="200">
<col width="250">
<col width="200">
</colgroup>
<tr>
<td><b>Reference Alignment:</b></td>
<td><input id="ref" type="file"></td>
</tr>
<tr>
<td><b>Source File:</b></td>
<td><input id="src" type="file" /></td>
</tr>
<tr>
<td><b>Target File:</b></td>
<td><input id="trg" type="file" /></td>
</tr>
</table>
<br />
<button id="button">Submit</button>
</form>
<br/>
</body>
</html>
Die Servletmethode wird hierbei jedoch nicht ausgeführt. Weiß jemand, wie ich ein InputStream-Objekt erstelle, dass ich dann Jersey übergeben kann, so dass es funktioniert?
Ich habe auch in manchen Tutorials gesehen, dass überhaupt kein JS/JQuery verwendet wurde, sondern direkt aus dem Form heraus das Servlet aufgerufen wurde (action="..."). Allerdings gab es dabei bei mir immer einen 404-Fehler und funktioniert hat es ebenfalls nicht.
Ich verwende Apache Tomcat v.7.0 (Windows 64-bit), Java 1.6 und Jersey Version 1.12 (bundle + multipart). Zum Anzeigen verwende ich Firefox 13.0.1. Ich hab leider bisher noch keine Erfahrung mit Webservices, daher ist jede Hilfe sehr willkommen!
Vielen Dank im Voraus!