Este artículo lo llevará a usar Jersey en función de la implementación de estilo Jax-RS REST para cargar archivos en las carpetas formuladas por el servidor. Si es una imagen y léela para mostrar la imagen.
Preparación: prepare un formulario de formulario con dos campos, uno es tipo = "archivo" y tipo = "texto", y el formulario debe enviarse utilizando POST. Tenga en cuenta que se requiere multipart/form-data para modificar el formulario. El proyecto se desarrolla y se ejecuta utilizando NetBeans8.0 y Glassfish4.0. Y use Maven para administrar el proyecto; Debe crear una carpeta en su unidad C para almacenar los archivos cargados. Por ejemplo, c:/newsportal/article_images Development Environment: 1 Cree un proyecto y haga clic con el botón derecho en el espacio en blanco de su proyecto -> Haga clic para crear un nuevo proyecto
2 Seleccione Maven-》 Haga clic en la aplicación web a la derecha
3 Complete el nombre del proyecto y la identificación del grupo Maven y el nombre del paquete
4 Seleccione el entorno en ejecución del proyecto como servidor de pez vidrio del servidor
5 Finalmente haga clic para completar y prepararse para construir el entorno operativo de Jersey:
1 Para configurar Maven, debe depender del paquete. Las dependencias del archivo Maven POM son las siguientes:
<? xml versión = "1.0" encoding = "utf-8"?>
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. http://maven.apache.org/xsd/maven-4.0.0.xsd ">
<modelVersion> 4.0.0 </ModelVersion>
<MoupRoD> com.vi8 </groupid>
<SartifactID> Jerseyuploaddemo </artifactid>
<versión> 1.0-snapshot </versión>
<Artaging> war </packaging>
<name> jerseyuploaddemo </name>
<Scuion>
Jersey Subir el archivo DMEO
</descripción>
<Propiedades>
<Endorsed.dir> $ {Project.Build.Directory}/Endorsed </ENDORSED.DIR>
<Project.Build.SourceEncoding> UTF-8 </project.build.sourceEnding>
</propiedades>
<pendencias>
<!-Jersey->
<pendencia>
<MoupRid> org.glassfish.jersey.core </groupid>
<artifactid> jersey-server </artifactid>
<Versión> 2.0 </versión>
<prote> jar </pype>
<cope> proporcionado </cope>
</pendency>
<pendencia>
<MoupRoD> org.glassfish.jersey.ext </groupid>
<artifactid> jersey-mvc-jsp </artifactid>
<Versión> 2.0 </versión>
<prote> jar </pype>
<cope> proporcionado </cope>
</pendency>
<pendencia>
<MoupRid> org.glassfish.jersey.media </groupid>
<ArFactId> Jersey-Media-Json-Jackson </arfactid>
<Versión> 2.0 </versión>
<prote> jar </pype>
<cope> proporcionado </cope>
</pendency>
<!-Se requiere esta dependencia para cargar un archivo->
<pendencia>
<MoupRid> org.glassfish.jersey.media </groupid>
<SartifactID> Jersey-Media-Multipart </artifactid>
<Versión> 2.0 </versión>
<cope> proporcionado </cope>
</pendency>
<!-Esto se utiliza para la operación de la herramienta de carga de archivos->
<pendencia>
<MoupRoD> Commons-io </groupId>
<ArFactId> Commons-io </artifactid>
<Versión> 2.4 </versión>
</pendency>
<pendencia>
<MoupRId> Javax </groupId>
<ArFactId> javaee-web-api </artifactid>
<Versión> 7.0 </versión>
<cope> proporcionado </cope>
</pendency>
</dependencias>
<11 construidos>
<gotins>
<Clugin>
<MoupRid> org.apache.maven.plugins </groupid>
<artifactID> maven-compiler-plugin </artifactid>
<Versión> 3.1 </versión>
<Configuración>
<over> 1.7 </over>
<Target> 1.7 </target>
<COPILERARGUMENTS>
<DartoredDirs> $ {Endorsed.dir} </EndorsedDirs>
</compilerarguments>
</figuration>
</tugin>
<Clugin>
<MoupRid> org.apache.maven.plugins </groupid>
<artifactid> maven-war-plugin </artifactid>
<Versión> 2.3 </versión>
<Configuración>
<FailOnmissingWebxml> false </failonmissingwebxml>
</figuration>
</tugin>
<Clugin>
<MoupRid> org.apache.maven.plugins </groupid>
<artifactID> maven-dependency-plugin </artifactid>
<Versión> 2.6 </versión>
<ecuciones>
<Esecution>
<fase> validar </fase>
<Sits>
<SOT> COPIE </mOTAL>
</etals>
<Configuración>
<PoutedDirectory> $ {Endorsed.dir} </outputDirectory>
<Silent> True </lilent>
<Artifactitems>
<Artifactitem>
<MoupRId> Javax </groupId>
<artifactid> javaee-dacorsed-api </artifactid>
<Versión> 7.0 </versión>
<prote> jar </pype>
</artifactitem>
</artifactitems>
</figuration>
</secution>
</ecuciones>
</tugin>
</glugins>
</strato>
</ject>
2 Configurar Web.xml para admitir Jersey y configúrelo de la siguiente manera:
<? xml versión = "1.0" encoding = "utf-8"?>
<web-app versión = "3.1" xmlns = "http://xmlns.jcp.org/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd ">
<filtrar>
<filter-name> JerseyFilter </filtre-name>
<Tilter-Class> org.glassfish.jersey.servlet.servletcontainer </filter-class>
<Init-Param>
<amamname> javax.ws.rs.application </param-name>
<!-MyApplication.Java Jersey Carga->
<amam-value> com.vi8.upload.myapplication </amam-value>
</init-param>
<Init-Param>
<amamname> jersey.config.servlet.filter.staticContentregex </amamname>
<Amam-Value>/(IMG | CSS | JS | FONT) /.* </param-value>
</init-param>
<Init-Param>
<amamname> jersey.config.servlet.filter.forwardon404 </param-name>
<Amam-Value> True </Param-Value>
</init-param>
<Init-Param>
<Amam-name> jersey.config.server.mvc.templateBasepath.jsp </param-name>
<Amam-Value>/Web-INF/PAGES </Param-Value>
</init-param>
</filter>
<Mapping Filter>
<filter-name> JerseyFilter </filtre-name>
<Url-Pattern>/*</url-Pattern>
</mapeo de filtro>
<Bienvenido-File-List>
<velceed-file> index.jsp </Welcome-File>
</Welcome-File-List>
</web-app>
3 Escriba myApplication.java utilizado en Web.xml arriba de la siguiente manera:
paquete com.vi8.upload;
import javax.ws.rs.ApplicationPath;
importar org.glassfish.jersey.jackson.jacksonfeature;
importar org.glassfish.jersey.media.multipart.multipartFeature;
importar org.glassfish.jersey.server.resourceconfig;
importar org.glassfish.jersey.server.mvc.jsp.jspmvcfeature;
/**
* QQ: [email protected]
*
* @Author Administrator
*/
@AplicationPath ("/")
MyApplication de clase pública extiende ResourCeConfig {
public myApplication () {
paquetes ("com.vi8.upload.resources");
registrar (jspmvcfeature.class);
registrar (JacksonFeature.Class);
registrar (multipartFeature.class);
}
}
Los pasos anteriores son básicamente la preparación para el entorno de operación de Jersey, y luego comenzaremos a discutir cómo cargar el archivo.
Carga del archivo de Jersey:
1 La clase de recursos cargada por el archivo, puede entender que es el controlador en Spring MVC. UploadImageresource.java Manifest Code
paquete com.vi8.upload.resources;
import java.io.file;
import java.io.fileInputStream;
import java.io.fileOutputStream;
import java.io.ioException;
import java.io.inputstream;
import java.io.outputstream;
import java.io.unsupportedencodingException;
import java.util.calendar;
import java.util.logging.level;
import java.util.logging.logger;
import javax.servlet.http.httpservletResponse;
import javax.ws.rs.consumes;
import javax.ws.rs.get;
import javax.ws.rs.post;
import javax.ws.rs.path;
import javax.ws.rs.pathparam;
import javax.ws.rs.produce;
import javax.ws.rs.core.context;
import javax.ws.rs.core.mediatype;
importar org.apache.commons.io.fileUtils;
importar org.glassfish.jersey.media.multipart.ContentDisposition;
importar org.glassfish.jersey.media.multipart.formdatabodypart;
importar org.glassfish.jersey.media.multipart.FormDatAcontentDisposition;
importar org.glassfish.jersey.media.multipart.formdatamultipart;
importar org.glassfish.jersey.media.multipart.formdataparam;
@Path ("Subir")
clase pública uploadImagerSource {
/**
* Constantes que operan con imágenes
*/
Cadena final estática privada Artículo_images_path = "c:/newsportal/artice_images/";
Cadena final estática privada jpg_content_type = "image/jpeg";
cadena final estática privada png_content_type = "image/png";
/**
* El primer método para cargar
*
* @param fileInputStream
* @param disposición
* @devolver
*/
@CORREO
@Path ("cargarimage1")
@Consumes (Mediatype.multipart_form_data)
public String uploadIloadImage1 (@FormDataparam ("File") InputStream FileInputStream,
@FormDataparam ("File") FormDataContentDisposition Disposition) {
String ImageName = calendar.getInstance (). GetTimeInmillis ()
+ disposition.getFileName ();
Archivo archivo = nuevo archivo (artículo_images_path + imageName);
intentar {
// Utilice la operación de escritura de archivos IO comunes
FileUtils.CopyInputStreamToFile (fileInputStream, file);
// Resulta que mi propia operación de escritura de archivos
// saveFile (fileInputStream, archivo);
} catch (ioException ex) {
Logger.getLogger (uploadImageResource.class.getName ()). Log (nivel.severe, null, ex);
}
return "Images/" + ImageName;
}
/**
* *
* La segunda forma de cargar y usar FormDatamultipart para obtener datos de formulario
*
* @Param Form
* @Param Respuesta
* @devolver
* @throws UnsupportedEncodingException
*/
@CORREO
@Path ("cargarimage2")
@Consumes (Mediatype.multipart_form_data)
@Produces (Mediatype.Application_JSON)
Public String uploadImage2 (formyMultipart Form, @Context HttpServletResponse Respuesta) lanza UnsupportedEncodingException {
// Obtener la transmisión de archivos
Formdatabodypart filePart = form.getfield ("archivo");
// Obtener otros datos del formulario
FormDatabodyPart UserNamePart = Form.getField ("Nombre de usuario");
// ContentDisposition HeaderOffilepart = FilePart.GetContentDisposition ();
// Convertir el contenido de formulario en transmisión
InputStream FileInputStream = FilePart.GetValueas (inputStream.class);
FormdatAcontentDisposition formDatAcontentDisposition = filePart.getFormDatAcontentDisposition ();
String Source = FormDataContentDisposition.getFileName ();
Result de cadena = nueva cadena (fuente.getBytes ("ISO8859-1"), "UTF-8");
System.out.println ("FormDataContentDisposition.getFileName () resultado" + resultado);
Cadena filePath = Artículo_images_path + resultado;
Archivo archivo = nuevo archivo (filepath);
System.out.println ("file" + file.getabsolutePath ());
intentar {
// Guardar el archivo
FileUtils.CopyInputStreamToFile (fileInputStream, file);
// saveFile (fileInputStream, archivo);
} catch (ioException ex) {
Logger.getLogger (uploadImageResource.class.getName ()). Log (nivel.severe, null, ex);
}
System.out.println (" +" imágenes/" + resultado);
respuesta.setcharacterEncoding ("UTF-8");
return "Images/" + resultado;
}
/**
*
* No lea imágenes del servidor web. Los archivos en un determinado directorio en el disco se pueden obtener a través de las transmisiones y devolver los datos a través de la respuesta.getOutputStream ().
*
* @param Imagen de nombre de imagen
* @param Tipo Extensión de imagen
* @param respuesta {@link httpservletResponse}
* @throws ioexception
*/
@CONSEGUIR
@Path ("/Images/{name}. {Type}")
public void showimg (@PathParam ("Nombre") String ImageName,
@PathParam ("Tipo") Tipo de cadena,
@Context HttpServletResponse Respuesta)
lanza ioexception {
System.out.println ("showImg");
try (inputStream in = new FileInputStream (Artículo_images_Path
+ nombre de imaginación + "." + tipo)) {
FileUtils.CopyFile (nuevo archivo (artículo_images_path + imageName + "." + Type), respuesta.getOutputStream ());
// fileCopyUtils.copy (in, respuesta.getOutputStream ());
}
}
// Guardar información del archivo en el disco
Private void saveverfile (InputStream uploadedInputStream, archivo de archivo) {
System.out.println ("------- SaveFile -----");
intentar {
OutputStream outputPustrEAM = new FileOutputStream (archivo);
int read = 0;
byte [] bytes = new Byte [1024];
// outputStream = new FileOutputStream (nuevo archivo (ServerLocation));
while ((read = uploadedInputStream.read (bytes))! = -1) {
OUTPURSTEAM.Write (bytes, 0, lea);
}
outputStream.Flush ();
OUTPURSTEAM.CLOSE ();
} Catch (ioException e) {
E.PrintStackTrace ();
}
}
}
2 Por supuesto, para probar, es posible que también deba preparar un archivo JSP con formulario de formulario
<Form Action = "$ {PageContext.Request.ContextPath}/upload/uploadImage2" método = "post" enctype = "multipart/form-data">
<p>
Archivo: <input type = "file" name = "file" /> <br />
Nombre de usuario: <input type = "text" name = "username" /> <br />
</p>
<input type = "enviar" valor = "cargar" />
</form>
Los resultados son los siguientes
Lo anterior se trata de este artículo, espero que sea útil para todos implementar la carga de archivos de Jersey.