Este artigo levará você a usar a Jersey com base na implementação do estilo Jax-Rs Rest para fazer upload de arquivos nas pastas formuladas pelo servidor. Se for uma imagem e leia -a para exibir a imagem.
Preparação: Prepare um formulário com dois campos, um é tipo = "arquivo" e tipo = "texto", e o formulário precisa ser enviado usando o post. Observe que é necessário multipart/form-data para modificar o formulário. O projeto é desenvolvido e executado usando NetBeans8.0 e Glassfish4.0. E usar o Maven para gerenciar o projeto; Você precisa criar uma pasta na sua unidade C para armazenar os arquivos enviados. Por exemplo, C:/Newsportal/Artigo_images Desenvolvimento Ambiente: 1 Crie um projeto e clique com o botão direito do mouse no espaço em branco do seu projeto -> Clique para criar um novo projeto
2 Selecione Maven-》 Clique no aplicativo da web à direita
3 Preencha o nome do projeto e o ID do grupo Maven e o nome do pacote
4 Selecione o ambiente em execução do projeto como servidor servidor de glassfish
5 Finalmente, clique para concluir e se preparar para construir o ambiente operacional da camisa:
1 Para configurar o maven, você precisa depender do pacote. As dependências de arquivos do Maven POM são as seguintes:
<? xml versão = "1.0" coding = "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 http://maven.apache.org/xsd/maven-4.0.0.xsd ">
<ModelVersion> 4.0.0 </modelversion>
<GrupidId> com.vi8 </frugiD>
<TarfactId> Jerseyuploaddemo </stifactId>
<Versão> 1.0-SNAPSHOT </SSERSO>
<batyaging> Guerra </backaging>
<name> jerseyuploaddemo </name>
<Descrição>
Jersey upload arquivo dmeo
</Descrição>
<Proadies>
<Endossed.dir> $ {Project.build.directory}/endossado </endorsed.dir>
<Project.build.sourceEncoding> utf-8 </project.build.sourceEncoding>
</propriedades>
<pendências>
<!-Jersey->
<pendência>
<GrupidId> org.glassfish.jersey.core </frupid>
<stifactId> Jersey-server </stifactId>
<versão> 2.0 </versão>
<type> jar </pype>
<cope> fornecido </cope>
</dependency>
<pendência>
<GrupidId> org.glassfish.jersey.ext </frupid>
<TarfactId> Jersey-mvc-jsp </stifactId>
<versão> 2.0 </versão>
<type> jar </pype>
<cope> fornecido </cope>
</dependency>
<pendência>
<GrupidId> org.glassfish.jersey.media </foupid>
<stifactId> Jersey-Media-Json-Jackson </stifactId>
<versão> 2.0 </versão>
<type> jar </pype>
<cope> fornecido </cope>
</dependency>
<!-Esta dependência é necessária para fazer upload de um arquivo->
<pendência>
<GrupidId> org.glassfish.jersey.media </foupid>
<Artifactid> Jersey-Media-Multipart </stifactId>
<versão> 2.0 </versão>
<cope> fornecido </cope>
</dependency>
<!-Isso é usado para operação da ferramenta de upload de arquivo->
<pendência>
<GrupoId> Commons-Io </frupId>
<TarfactId> Commons-Io </stifactId>
<Versão> 2.4 </sisters>
</dependency>
<pendência>
<GrupoId> javax </frupId>
<TarifactId> javaee-web-api </stifactId>
<Versão> 7.0 </sisters>
<cope> fornecido </cope>
</dependency>
</dependências>
<uild>
<flugins>
<lugin>
<GrupidId> org.apache.maven.plugins </frupidId>
<TarifactId> maven-compiler-plugin </stifactId>
<Versão> 3.1 </sisters>
<figuration>
<OrceM> 1.7 </souper>
< -Target> 1.7 </ -Target>
<CompilerArguments>
<EndondeSedDirs> $ {endossed.dir} </ndorSedDirs>
</compilerarguments>
</figuration>
</plugin>
<lugin>
<GrupidId> org.apache.maven.plugins </frupidId>
<TarfactId> maven-war-plugin </stifactId>
<Versão> 2.3 </sisters>
<figuration>
<FailonMissingWebxml> false </failonMissingWebxml>
</figuration>
</plugin>
<lugin>
<GrupidId> org.apache.maven.plugins </frupidId>
<stifactid> mavenen-dependência-plugina </stifactId>
<Versão> 2.6 </sisters>
<Comestuions>
<Execução>
<shase> validar </shase>
<lects>
<lect> cópia </fast>
</gols>
<figuration>
<putputDirectory> $ {endossed.dir} </outputDirectory>
<Silent> Verdadeiro </silent>
<Artifactitems>
<ArtifactItem>
<GrupoId> javax </frupId>
<TarifactId> javaee-endorsed-api </stifactId>
<Versão> 7.0 </sisters>
<type> jar </pype>
</artifactitem>
</artifactitems>
</figuration>
</execução>
</execuções>
</plugin>
</plugins>
</built>
</ject>
2 Configure web.xml para suportar Jersey e configurá -lo o seguinte:
<? xml versão = "1.0" coding = "utf-8"?>
<web-app versão = "3.1" xmlns = "http://xmlns.jcp.org/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-sstance" xsi: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<filtro>
<filtro-name> jerseyfilter </filter-name>
<filter-class> org.glassfish.jersey.servlet.servletContainer </filter-Class>
<iit-param>
<amam-name> javax.ws.rs.Application </amam-name>
<!-MyApplication.java Jersey Carregando->
<amam-value> com.vi8.upload.myApplication </amam-value>
</init-param>
<iit-param>
<amam-name> jersey.config.servlet.filter.staticContentRegex </param-name>
<amam-value>/(img | css | js | font) /.* </param-value>
</init-param>
<iit-param>
<amam-name> jersey.config.servlet.filter.forwardon404 </param-name>
<amam-value> true </param-value>
</init-param>
<iit-param>
<amam-name> jersey.config.server.mvc.templatebasepath.jsp </param-name>
<amam-value>/web-inf/páginas </param-value>
</init-param>
</filter>
<filter-mapping>
<filtro-name> jerseyfilter </filter-name>
<url-padrão>/*</url-padrão>
</filter-mapping>
<list-list>
<ldenmal-File> index.jsp </-Welcome-File>
</-Welcome-File-List>
</web-app>
3 Escreva o MyApplication.java usado em web.xml acima da seguinte forma:
pacote com.vi8.upload;
importar 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]
*
* Administrador @Author
*/
@ApplicationPath ("/")
classe pública MyApplication estende o ResourceConfig {
public myApplication () {
pacotes ("com.vi8.upload.resources");
registro (jspmvcfeature.class);
registro (JacksonFeature.class);
registro (multipartfeature.class);
}
}
As etapas acima são basicamente a preparação para o ambiente de operação de Jersey e, em seguida, começaremos a discutir como fazer upload do arquivo.
upload de arquivos de camisa:
1 A classe de recurso enviada pelo arquivo, você pode entender que é o controlador no MVC da primavera. UploadImageResource.java Código de manifesto
pacote com.vi8.upload.resources;
importar java.io.file;
importar java.io.fileInputStream;
importar java.io.fileOutputStream;
importar java.io.ioException;
importar java.io.inputStream;
importar java.io.OutputStream;
importar java.io.unsupportEnCodingException;
importar java.util.calendar;
importar java.util.logging.level;
importar java.util.logging.logger;
importar javax.servlet.http.httpServletResponse;
importar javax.ws.rs.consumes;
importar javax.ws.rs.get;
importar javax.ws.rs.post;
importar javax.ws.rs.path;
importar javax.ws.rs.pathparam;
importar javax.ws.rs.produces;
importar javax.ws.rs.core.context;
importar javax.ws.rs.core.mediatype;
importar org.apache.commons.io.fileUtils;
importar org.glassfish.jersey.media.multipart.contentDispition;
importar org.glassfish.jersey.media.multipart.formDatabodyPart;
importar org.glassfish.jersey.media.multipart.formdatacontentDispition;
importar org.glassfish.jersey.media.multipart.formdatamultipart;
importar org.glassfish.jersey.media.multipart.formDataparam;
@Path ("Upload")
classe pública uploadImageResource {
/**
* Constantes operando com imagens
*/
String final estática privada Article_images_path = "C:/Newsportal/artigo_images/";
String final estática privada jpg_content_type = "image/jpeg";
String final estática privada PNG_CONTENT_TYPE = "Image/png";
/**
* O primeiro método para fazer upload
*
* @param fileInputStream
* Disposição @param
* @retornar
*/
@PUBLICAR
@Path ("UploadImage1")
@Consumes (MediaType.multipart_form_data)
public string uploadImage1 (@FormDataParam ("arquivo") inputStream FileInputStream,
@FormDataParam ("arquivo") FormDACONTENTDISPOSIÇÃO DISPOSIÇÃO) {
String imageName = calendar.getInstance (). GettimeInmillis ()
+ disposição.getFilename ();
Arquivo de arquivo = novo arquivo (artigo_images_path + imageName);
tentar {
// Use a operação comum de gravação de arquivos de IO
Fileutils.copyInputStreamTofile (FileInputStream, arquivo);
// Acontece que minha própria operação de escrita de arquivos
// savefile (fileInputStream, arquivo);
} catch (ioexception ex) {
Logger.getLogger (uploadImageResource.class.getName ()). Log (Level.severe, null, ex);
}
retornar "imagens/" + imageName;
}
/**
* *
* A segunda maneira de fazer upload e usar o FormDatamultipart para obter dados de formulário
*
* Formulário @param
* Resposta @param
* @retornar
* @THOWS UnsupportEdEncodingException
*/
@PUBLICAR
@Path ("UploadImage2")
@Consumes (MediaType.multipart_form_data)
@Produces (mediatype.application_json)
public string uploadImage2 (form.matamultipart, @Context httpServletResponse resposta) lança UnsupportEdEncodingingException {
// Obtenha o fluxo de arquivos
FormDABABodyPart filepart = form.getfield ("arquivo");
// Obtenha outros dados do formulário
FormDatabodyPart UsernamePart = Form.getfield ("Nome de usuário");
// contentDispition headefilePart = filepart.getContentDispition ();
// Converter o conteúdo do formulário em fluxo
InputStream fileInputStream = filepart.getValueas (inputStream.class);
FormDACACONTENTDISPOSIÇÃO FormDACACONTENTDISPOSIÇÃO = FILOPART.GETFORMFATACONTENTDISPOSIÇÃO ();
String fonte = formDACONTENTDISPOSIÇÃO.GETFILENAME ();
String resultado = new String (fonte.getBytes ("ISO8859-1"), "UTF-8");
System.out.println ("formDATACONTENTDISPOSIÇÃO.GETFILENAME () resultado" + resultado);
String filepath = artigo_images_path + resultado;
Arquivo de arquivo = novo arquivo (filepath);
System.out.println ("file" + file.getabsolutepath ());
tentar {
// salve o arquivo
Fileutils.copyInputStreamTofile (FileInputStream, arquivo);
// savefile (fileInputStream, arquivo);
} catch (ioexception ex) {
Logger.getLogger (uploadImageResource.class.getName ()). Log (Level.severe, null, ex);
}
System.out.println ("" + "imagens/" + resultado);
Response.Setcharacterencoding ("UTF-8");
retornar "imagens/" + resultado;
}
/**
*
* Não leia fotos do servidor da web. Os arquivos em um determinado diretório no disco podem ser obtidos por meio de fluxos e colocar os dados de volta através da resposta.getOutputStream ().
*
* @param imageName Image-name
* @param tipo extensão da imagem
* @param Response {@link httpServletResponse}
* @THOWSows IoException
*/
@PEGAR
@Path ("/imagens/{name}. {Type}")
public void showimg (@pathparam ("name") string imageName,
@Pathparam ("tipo") Tipo de string,
@Context HttpServletResponse resposta)
lança ioexception {
System.out.println ("showimg");
tente (inputStream in = new FileInputStream (artigo_images_path
+ imageName + "." + tipo)) {
Fileutils.copyfile (novo arquivo (artigo_images_path + imageName + "." + Tipo), resposta.getOutputStream ());
// FileCopyUtils.copy (in, Response.getOutputStream ());
}
}
// Salvar informações do arquivo no disco
private void savefile (inputStream uploadEdInputStream, arquivo de arquivo) {
System.out.println ("------- SaveFile -----");
tentar {
OutputStream outputPustream = new FileOutputStream (arquivo);
int read = 0;
byte [] bytes = novo byte [1024];
// outputStream = new FileOutputStream (novo arquivo (serverLocation));
while ((leia = UPLOUDEDIMPTREAM.read (bytes))! = -1) {
outpustream.write (bytes, 0, leia);
}
outputStream.flush ();
outpustream.close ();
} catch (ioexception e) {
E.PrintStackTrace ();
}
}
}
2 Claro, para testar, você também pode precisar preparar um arquivo JSP com formulário
<form ação = "$ {PageContext.request.ContextPath}/upload/uploadImage2" method = "post" Enctype = "Multipart/Form-Data">
<p>
Arquivo: <input type = "file" name = "arquivo" /> <r />
Nome de usuário: <input type = "text" name = "nome de usuário" /> <r />
</p>
<input type = "submit" value = "upload" />
</morm>
Os resultados são os seguintes
O exposto acima é tudo sobre este artigo, espero que seja útil para todos implementar o upload de arquivos da Jersey.