In diesem Artikel werden Sie Jersey basierend auf der Implementierung von JAX-RS REST-Stil verwenden, um Dateien in die vom Server formulierten Ordner hochzuladen. Wenn es sich um ein Bild handelt und es lesen, um das Bild anzuzeigen.
Vorbereitung: Bereiten Sie ein Formularformular mit zwei Feldern vor, eines ist type = "file" und type = "text", und das Formular muss mit post eingereicht werden. Beachten Sie, dass zum Ändern des Formulars multipart/form-data erforderlich ist. Das Projekt wird mit NetBeans8.0 und Glassfish4.0 entwickelt und ausgeführt. Und verwenden Sie Maven, um das Projekt zu verwalten; Sie müssen einen Ordner auf Ihrem C -Laufwerk erstellen, um die hochgeladenen Dateien zu speichern. Zum Beispiel C:/Newsportal/Artikel_Images -Entwicklungsumgebung: 1 Erstellen Sie ein Projekt und klicken Sie mit der rechten Maustaste auf den leeren Speicherplatz Ihres Projekts -> Klicken Sie Klicken, um ein neues Projekt zu erstellen
2 Wählen Sie Maven-》 Klicken Sie auf die Webanwendung rechts
3 Füllen Sie den Projektnamen und die Maven -Gruppen -ID und den Paketnamen ein
4 Wählen Sie die laufende Umgebung des Projekts als Server -Glassfish -Server aus
5 Klicken Sie schließlich, um die Betriebsumgebung Jersey zu erstellen und vorzubereiten:
1 Um Maven zu konfigurieren, müssen Sie sich vom Paket verlassen. Die Abhängigkeiten der Maven POM -Datei sind wie folgt:
<? xml Version = "1.0" coding = "utf-8"?>
<project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance http://maven.apache.org/xsd/maven-4.0.0.xsd ">
<modelVersion> 4.0.0 </modelversion>
<gruppe> com.vi8 </Groupid>
<artifactid> jerseyuploaddemo </artifactid>
<version> 1.0-Snapshot </Version>
<Packages> Krieg </packaging>
<Name> JerseyUploaddemo </name>
<BEKRESCHNUNG>
Jersey Upload Datei DMEO
</Beschreibung>
<Porpies>
<teufored.dir> $ {project.build.directory}/teured </endorsed.dir>
<project.build.sourceEnecoding> utf-8 </project.build.SourceEncoding>
</Properties>
<Depecies>
<!-Jersey->
<De vorangehen>
<GruppeId> org.glassfish.jersey.core </Groupid>
<artifactid> Jersey-Server </artifactid>
<version> 2.0 </Version>
<Typ> jar </type>
<Scope> bereitgestellt </Scope>
</abhängig>
<De vorangehen>
<GruppeId> org.glassfish.jersey.ext </Groupid>
<artifactid> jersey-mvc-jsp </artifactid>
<version> 2.0 </Version>
<Typ> jar </type>
<Scope> bereitgestellt </Scope>
</abhängig>
<De vorangehen>
<GruppeId> org.glassfish.jersey.media </Groupid>
<artifactid> jersey-media-json-jackson </artifactid>
<version> 2.0 </Version>
<Typ> jar </type>
<Scope> bereitgestellt </Scope>
</abhängig>
<!-Diese Abhängigkeit ist erforderlich, um eine Datei hochzuladen->
<De vorangehen>
<GruppeId> org.glassfish.jersey.media </Groupid>
<artifactid> jersey-media-multipart </artifactid>
<version> 2.0 </Version>
<Scope> bereitgestellt </Scope>
</abhängig>
<!-Dies wird für das Datei-Upload-Toolbetrieb-> verwendet
<De vorangehen>
<GruppeId> commons-io </Groupid>
<artifactid> commons-io </artifactid>
<version> 2.4 </Version>
</abhängig>
<De vorangehen>
<gruppeID> Javax </Groupid>
<artifactid> javaee-Web-api </artifactid>
<version> 7.0 </Version>
<Scope> bereitgestellt </Scope>
</abhängig>
</Abhängigkeiten>
<Build>
<plugins>
<plugin>
<gruppe> org.apache.maven.plugins </Groupid>
<artifactid> maven-compiler-plugin </artifactid>
<version> 3.1 </Version>
<Configuration>
<quelle> 1.7 </source>
<Target> 1.7 </target>
<Compilerargumente>
<teuforsedDirs> $ {{teufored.dir} </teuforsedDirs>
</compilerArgumente>
</Konfiguration>
</plugin>
<plugin>
<gruppe> org.apache.maven.plugins </Groupid>
<artifactid> maven-kriege-plugin </artifactid>
<version> 2.3 </Version>
<Configuration>
<SeuchtigkeitsonmissingwebxMl> False </failonmingwebxMl>
</Konfiguration>
</plugin>
<plugin>
<gruppe> org.apache.maven.plugins </Groupid>
<artifactid> maven-abhängig-plugin </artifactid>
<version> 2.6 </Version>
<ausführungen>
<ausführung>
<Phase> validieren </phase>
<ziele>
<Geor> Kopie </Ziel>
</ziele>
<Configuration>
<outputDirectory> $ {teufored.dir} </outputDirectory>
<Sutil> True </stut>
<artifactitems>
<artifactitem>
<gruppeID> Javax </Groupid>
<artifactid> javaee-aß-api </artifactid>
<version> 7.0 </Version>
<Typ> jar </type>
</artifactItem>
</artifactitems>
</Konfiguration>
</Ausführung>
</Executions>
</plugin>
</plugins>
</bauen>
</project>
2 Konfigurieren Sie Web.xml, um Jersey zu unterstützen, und konfigurieren Sie es wie folgt:
<? xml Version = "1.0" coding = "utf-8"?>
<web-app Version = "3.1" xmlns = "http://xmlns.jcp.org/xml/ns/javaee" xmlns: xsi = "http://www.w.w3.org/2001/xmlschemasinstance" XSI: Schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaeee/web-app_3_1.xsd">
<Filter>
<Filter-Name> Jerseyfilter </filter-name>
<Filter-Klasse> org.glassfish.jersey.servlet.servletContainer </Filter-Class>
<init-param>
<Param-name> javax.ws.rs.application </param-name>
<!-MyApplication.java Jersey Loading->
<Param-value> com.vi8.Upload.MyApplication </param-value>
</init-param>
<init-param>
<Param-name> jersey.config.servlet.filter.staticContentreGex </param-name>
<param-value>/(img | css | js | font) /.* </param-value>
</init-param>
<init-param>
<Param-name> jersey.config.servlet.filter.forwardon404 </param-name>
<PARAM-VALUE> TRUE </param-value>
</init-param>
<init-param>
<Param-name> jersey.config.server.mvc.templateBasepath.jsp </param-name>
<Param-value>/webinf/Seiten </param-value>
</init-param>
</filter>
<Filtermapping>
<Filter-Name> Jerseyfilter </filter-name>
<URL-Muster>/*</url-pattern>
</filtermapping>
<Welcome-Dateiliste>
<Welcome-File> Index.jsp </Welcome-File>
</Welcome-Dateiliste>
</web-App>
3 Schreiben Sie die MyApplication.java in web.xml oben wie folgt:
Paket com.vi8.Upload;
import Javax.ws.rs.applicationPath;
import org.glassfish.jersey.jackson.jacksonFeature;
import org.glassfish.jersey.media.multipart.multipartFeature;
import org.glassfish.jersey.server.resourceConfig;
import org.glassfish.jersey.server.mvc.jsp.jspmvcFeature;
/**
* QQ: [email protected]
*
* @Author Administrator
*/
@ApplicationPath ("/")
öffentliche Klasse MyApplication erweitert ResourceConfig {
public myapplication () {
Pakete ("com.vi8.upload.resources");
Register (jspmvcFeature.class);
Register (JacksonFeature.class);
Register (MultipartFeature.class);
}
}
Die obigen Schritte sind im Grunde die Vorbereitung für die Jersey -Betriebsumgebung, und dann werden wir diskutieren, wie die Datei hochgeladen wird.
Upload der Jersey -Datei:
1 In der von der Datei hochgeladenen Ressourcenklasse können Sie verstehen, dass es sich um den Controller im Spring MVC handelt. UploadImageresource.java Manifest Code
Paket com.vi8.Upload.Resources;
Import Java.io.file;
import Java.io.FileInputStream;
importieren java.io.fileoutputStream;
importieren java.io.ioException;
importieren java.io.inputstream;
importieren java.io.outputstream;
importieren java.io.unsupportedenCodingException;
Import Java.util.Calendar;
import Java.util.logging.level;
import Java.util.logging.logger;
importieren javax.servlet.http.httpServletResponse;
importieren javax.ws.rs.consums;
importieren javax.ws.rs.get;
importieren javax.ws.rs.post;
importieren javax.ws.rs.path;
importieren javax.ws.rs.pathparam;
importieren javax.ws.rs.Produces;
importieren javax.ws.rs.core.context;
import Javax.ws.rs.core.MediType;
import org.apache.commons.io.fileutils;
import org.glassfish.jersey.media.multipart.ContentDisposition;
import org.glassfish.jersey.media.multipart.FormDatabodypart;
import org.glassfish.jersey.media.multipart.FormDatacontentDisposition;
import org.glassfish.jersey.media.multipart.FormDatamultipart;
import org.glassfish.jersey.media.multipart.FormDataparam;
@Path ("Upload")
öffentliche Klasse Uploadimageresource {
/**
* Konstanten, die mit Bildern arbeiten
*/
private statische endgültige Zeichenfolge article_images_path = "C:/Newsportal/article_images/";
private statische endgültige Zeichenfolge jpg_content_type = "image/jpeg";
private statische endgültige Zeichenfolge png_content_type = "image/png";
/**
* Die erste Methode zum Hochladen
*
* @param FileInputStream
* @param Disposition
* @zurückkehren
*/
@POST
@Path ("UploadImage1")
@Consumes (minyType.multiPart_form_data)
öffentliche String -UploadImage1 (@FormDataparam ("Datei") InputStream FileInputStream,
@FormDataparam ("Datei") FormDatacontentDisposition Disposition) {{
String imaginame = calendar.getInstance (). GetTimeInmillis ()
+ disposition.getFileName ();
Datei Datei = neue Datei (article_images_path + bildename);
versuchen {
// Verwenden Sie die gemeinsame IO -Datei -Schreiboperation
FileUtils.copyInputStreAmtoFile (FileInputStream, Datei);
// Es stellt sich heraus, dass meine eigene Dateischreiboperation
// SaveFile (FileInputStream, Datei);
} catch (ioException ex) {
Logger.getLogger (uploadImageresource.class.getName ()). Log (Level.Severe, Null, Ex);
}
Gibt "Bilder/" + ImagesName zurück;
}
/**
* *
* Die zweite Möglichkeit zum Hochladen und Verwenden von Formdatamultipart, um Formulardaten zu erhalten
*
* @param Form
* @param Antwort
* @zurückkehren
* @Throws Uns SupportedenCodingException
*/
@POST
@Path ("UploadImage2")
@Consumes (minyType.multiPart_form_data)
@Produces (minyType.Application_json)
public String uploadImage2 (FormDatamultiPart -Formular, @Context httpServletResponse -Antwort) löst nicht unterstütztEnencodingException {aus
// Dateistream abrufen
FormDatabodypart filePart = form.getField ("Datei");
// andere Daten des Formulars abrufen
FormDatabodypart usernamePart = Form.getField ("Benutzername");
// ContentDisposition HeaderOffilePart = filePart.getContentDisposition ();
// Forminhalte in Stream umwandeln
InputStream FileInputStream = filePart.getValueas (inputStream.class);
FormDatacontentDisposition FormDatacontentDisposition = filePart.getFormDatacontentDisposition ();
String Source = FormDatacontentDisposition.getFileName ();
String result = new String (Source.getBytes ("ISO8859-1"), "UTF-8");
System.out.println ("FormDatacontentDisposition.getFileName () Ergebnis" + Ergebnis);
String filepath = article_images_path + result;
Datei Datei = neue Datei (FilePath);
System.out.println ("Datei" + file.getabsolutepath ());
versuchen {
// die Datei speichern
FileUtils.copyInputStreAmtoFile (FileInputStream, Datei);
// SaveFile (FileInputStream, Datei);
} catch (ioException ex) {
Logger.getLogger (uploadImageresource.class.getName ()). Log (Level.Severe, Null, Ex);
}
System.out.println ("" + "Bilder/" + Ergebnis);
response.setcharactercoding ("utf-8");
Rückgabe "Bilder/" + Ergebnis;
}
/**
*
* Lesen Sie keine Bilder vom Webserver. Dateien in einem bestimmten Verzeichnis auf der Festplatte können über Streams erhalten werden und Daten über response.getOutputStream () zurückgeben.
*
* @param imageName Bildname
* @param Type Erweiterung des Bildes
* @param response {@link httpServletResponse}
* @throws ioException
*/
@ERHALTEN
@Path ("/Images/{Name}. {Typ}")
public void showimg (@PathParam ("Name") String ImageName,
@PathParam ("Typ") String -Typ,
@Context httpServletResponse -Antwort)
löst ioException {aus
System.out.println ("showimg");
Versuchen Sie (InputStream in = new FileInputStream (acction_images_path
+ Imagineame + "." + Typ)) {
FileUtils.copyFile (neue Datei (article_images_path + bildename + "." + Type), response.getOutputStream ());
// filecopyutils.copy (in, response.getOutputStream ());
}
}
// Dateiinformationen auf der Festplatte speichern
private void SaveFile (inputStream hochgeladeneInputStream, Dateidatei) {
System.out.println ("------- SaveFile -----");
versuchen {
OutputStream outputPustream = new FileOutputStream (Datei);
int read = 0;
byte [] bytes = neues byte [1024];
// outputStream = new FileOutputStream (neue Datei (ServerLocation));
while ((read = uploadedInputStream.read (Bytes))! = -1) {
OUTPUSTREAM.Write (Bytes, 0, lesen);
}
outputStream.flush ();
OUTPUSTREAM.CLOSE ();
} catch (ioException e) {
E. printstacktrace ();
}
}
}
2 Natürlich müssen Sie möglicherweise auch eine JSP -Datei mit Formularform erstellen
<form action = "$ {pageContext.request.contextPath}/Upload/UploadImage2" methode = "post" engTePe = "MultiPart/Form-Data">
<p>
Datei: <Eingabe type = "Datei" name = "Datei" /> <br />
Benutzername: <Eingabe type = "text" name = "userername" /> <br />
</p>
<input type = "surug" value = "Upload" />
</form>
Die Ergebnisse sind wie folgt
Im obigen dreht sich alles um diesen Artikel. Ich hoffe, dass es für alle hilfreich sein wird, das Upload von Jersey -Dateien zu implementieren.