Sie sind auf Seite 1von 5

27/10/13

FileUpload - Usando FileUpload

Usando FileUpload FileUpload pode ser utilizado num nmero de diferentes maneiras, dependendo dos requisitos da aplicao. No caso mais simples, voc vai chamar um nico mtodo para analisar o pedido de servlet e, em seguida, processar a lista de itens que se aplicam a sua aplicao. No outro extremo da escala, voc pode optar por personalizar FileUpload para assumir o controle total da maneira em que os itens individuais so armazenados, por exemplo, voc pode optar por transmitir o contedo em um banco de dados. Aqui, vamos descrever os princpios bsicos do FileUpload, e ilustrar algumas das mais simples - e mais comum - padres de uso. Personalizao de FileUpload descrito em outro lugar . FileUpload depende Commons IO, por isso certifique-se de ter a verso mencionada napgina dependncias no classpath antes de continuar. Como funciona Um arquivo de upload pedido inclui uma lista ordenada de itens que so codificadas de acordo com a RFC 1867 , "File Form baseado Upload em HTML". FileUpload pode analisar o pedido e dar a sua aplicao com uma lista de itens enviados individuais. Cada um desses itens implementa oF i l e I t e minterface, independentemente de sua implementao subjacente. Esta pgina descreve a API tradicional da biblioteca fileupload commons. A API tradicional uma abordagem conveniente. No entanto, para melhor desempenho, talvez voc prefira o mais rpido Streaming API . Cada item do arquivo tem um nmero de propriedades que possam ser de interesse para sua aplicao. Por exemplo, cada item tem um nome e um tipo de contedo, e pode fornecer umI n p u t S t r e a mpara acessar seus dados. Por outro lado, pode ser necessrio para processar itens de forma diferente, dependendo se o item um campo de forma regular - isto , os dados vieram de uma caixa de texto comum ou campo HTML semelhante - ou um arquivo enviado. O F i l e I t e minterface fornece mtodos para fazer tal determinao, e para acessar os dados da maneira mais adequada. FileUpload cria novos itens de arquivo usando umF i l e I t e m F a c t o r y. Isso o que d FileUpload maior parte de sua flexibilidade. A fbrica tem o controle final sobre como cada item criado. A implementao de fbrica que actualmente estimado com estabelecimentos FileUpload dados do item na memria ou no disco, dependendo do tamanho do produto (por exemplo, bytes de dados). No entanto, esse comportamento pode ser personalizado de acordo com sua aplicao. Servlets e Portlets A partir da verso 1.1, FileUpload suporta upload de arquivos pedidos em ambos servlet e ambientes de portlets. O uso quase idntico nos dois ambientes, de modo que o resto deste documento refere-se apenas ao ambiente servlet. Se voc est construindo uma aplicao portlet, so as seguintes as duas distines que voc deve fazer enquanto voc l este documento: Onde voc v as referncias aoS e r v l e t F i l e U p l o a dclasse, substituir oP o r t l e t F i l e U p l o a dclasse. Onde voc v as referncias aoH t t p S e r v l e t R e q u e s tclasse, substituir oA c t i o n R e q u e s tclasse. Analisando o pedido Antes que voc possa trabalhar com os itens enviados, claro, voc precisa analisar o pedido em si. Garantir que o pedido realmente um arquivo de upload pedido simples, mas FileUpload torna a prpria simplicidade, fornecendo um mtodo esttico para fazer exatamente isso.
//V e r i f i q u es et e m o su ma r q u i v od eu p l o a dp e d i d o b o o l e a ni s M u l t i p a r t= S e r v l e t F i l e U p l o a d.i s M u l t i p a r t C o n t e n t(p e d i d o) ;

Agora estamos prontos para analisar a solicitao em seus itens constituintes. O caso mais simples O cenrio de uso mais simples o seguinte: Itens enviados devem ser mantidos na memria, enquanto eles so razoavelmente pequenas.
commons.apache.org/proper/commons-fileupload/using.html 1/5

27/10/13

FileUpload - Usando FileUpload

Itens maiores devem ser gravados em um arquivo temporrio no disco. Muito grandes pedidos carregamento no deve ser permitido. A built-in padro para o tamanho mximo de um item a ser retida na memria, o tamanho mximo permitido de um pedido de upload, ea localizao de arquivos temporrios so aceitveis. Manipulao de um pedido nesse cenrio no poderia ser mais simples:
//C r i au m af b r i c ad ed i s c ob a s e a d oe ma r q u i v oi t e n s F i l e I t e m F a c t o r yf b r i c a= n e w D i s k F i l e I t e m F a c t o r y( ) ; //C o n f i g u r eu mr e p o s i t r i o( p a r ag a r a n t i ru ml o c a lt e m p o r r i os e g u r o

C r i eu mn o v oa r q u i v od om a n i p u l a d o rd eu p l o a d S e r v l e t F i l e U p l o a dd eu p l o a d= n e w S e r v l e t F i l e U p l o a d(f b r i c a) ; //a n a l i s a ras o l i c i t a o L i s t a<F i l e I t e m>i t e m s=d eu p l o a d.p a r s e R e q u e s t(p e d i d o) ;

Isso tudo o que necessrio. Realmente! O resultado da anlise uma l i s t ade itens de arquivos, cada um dos quais executa oF i l e I t e m interface. O processamento destes elementos discutido em baixo. Exercer mais controle Se o seu cenrio de uso perto o caso mais simples, descrito acima, mas voc precisa de um pouco mais de controle, voc pode facilmente personalizar o comportamento do manipulador de upload ou item de fbrica o arquivo ou ambos. O exemplo a seguir mostra vrias opes de configurao:
//C r i au m af b r i c ad ea r t i g o sd ea r q u i v ob a s e a d oe md i s c o D i s k F i l e I t e m F a c t o r yf b r i c a= n e w D i s k F i l e I t e m F a c t o r y( ) ; //S e tf b r i c ar e s t r i e s f b r i c a.s e t S i z e T h r e s h o l d(y o u r M a x M e m o r y S i z e) ; f b r i c a.s e t R e p o s i t o r y(y o u r T e m p D i r e c t o r y) ; //C r i au mn o v oa r q u i v od eu p l o a dd em a n i p u l a d o r S e r v l e t F i l e U p l o a dd eu p l o a d= n e w S e r v l e t F i l e U p l o a d(f b r i c a) ; //S e tc o n s t r a n g i m e n t og e r a lt a m a n h od op e d i d o d eu p l o a d.s e t S i z e M a x(y o u r M a x R e q u e s t S i z e) ; //a n a l i s a ras o l i c i t a o L i s t a<F i l e I t e m>i t e m s=d eu p l o a d.p a r s e R e q u e s t(p e d i d o) ;

Claro, cada um dos mtodos de configurao independente dos outros, mas se voc quiser configurar a fbrica de uma s vez, voc pode fazer isso com um construtor alternativo, como este:
//C r i au m af b r i c ad ed i s c ob a s e a d oe ma r q u i v oi t e n s D i s k F i l e I t e m F a c t o r yf b r i c a= n e w D i s k F i l e I t e m F a c t o r y(y o u r M a x M e m o r y S i z e,y o u r T e m p D i r e c t o r y) ;

Se voc precisar de mais controle sobre a anlise do pedido, tais como armazenar os itens de outros lugares - por exemplo, em um banco de dados - voc precisa olhar para a personalizaoFileUpload. Processamento dos itens enviados Uma vez que a anlise for concluda, voc ter uma l i s t ade itens de arquivos que voc precisa para processar. Na maioria dos casos, voc vai querer lidar com o upload de arquivos de forma diferente a partir de campos de formulrios regulares, de modo que voc pode processar a lista como esta:
//P r o c e s s a rac a r r e g a d o
commons.apache.org/proper/commons-fileupload/using.html 2/5

27/10/13

FileUpload - Usando FileUpload

Para um campo de forma regular, voc provavelmente ir se interessar apenas em nome do item, e sua c a d e i ade valor. Como voc poderia esperar, o acesso a estes muito simples.
//P r o c e s s od eu mc a m p od ef o r m u l r i on o r m a l s e (a r t i g o.i s F o r m F i e l d( ) ) { s e q n c i an a m e=a r t i g o.g e t F i e l d N a m e( ) ; c a d e i ad ev a l o r=p o n t o.g e t S t r i n g( ) ; . . . }

Para um arquivo de upload, h vrias coisas diferentes que voc pode querer saber antes de processar o contedo. Aqui est um exemplo de alguns dos mtodos que voc pode estar interessado em
//P r o c e s s a ru ma r q u i v o

Com os arquivos enviados, geralmente voc no vai querer acess-los atravs da memria, a menos que eles so pequenos, ou a menos que voc no tem outra alternativa. Em vez disso, voc vai querer processar o contedo como um fluxo, ou gravar o arquivo inteiro para a sua localizao final. FileUpload proporciona um meio simples de realizar ambos estes.
//P r o c e s s a ru ma r q u i v o

Note-se que, na implementao do padro de FileUpload, w r i t e( )tentar mudar o nome do arquivo para o destino especificado, se os dados j esto em um arquivo temporrio. Copiando Na verdade, os dados s feito se o a renomeao falhar, por algum motivo, ou se os dados estavam na memria. Se voc precisar acessar os dados carregados na memria, voc precisa simplesmente chamar o g e t ( )mtodo para obter os dados como uma matriz de bytes.
//P r o c e s s a ru mu p l o a dd oa r q u i v oe mm e m r i a b y t e[ ]d a d o s=a r t i g o.o b t e r( ) ; . ..

Limpeza de Recursos Esta seo se aplica somente se voc estiver usando o DiskFileItem . Em outras palavras, aplica-se, se os arquivos enviados so gravados em arquivos temporrios antes de process-los. Esses arquivos temporrios so eliminados automaticamente, se eles no so mais usados (mais precisamente, se a instncia correspondente do j a v a . i o . F i l e lixo coletado. Isso feito silenciosamente peloo r g . a p a c h e . c o m m o n s . i o . F i l e C l e a n e rclasse, que se inicia um fio ceifeiro.
commons.apache.org/proper/commons-fileupload/using.html 3/5

27/10/13

FileUpload - Usando FileUpload

Esta discusso ceifeiro deve ser interrompido, se no for mais necessrio. Em um ambiente de servlet, isto feito usando um contexto ouvinte servlet especial, chamado FileCleanerCleanup .Para fazer isso, adicione uma seo como o seguinte ao seu w e b . x m l:
< w e b a p p > . . . < l i s t e n e r > < l i s t e n e r c l a s s > o r g . a p a c h e . c o m m o n s . f i l e u p l o a d . s e r v l e t . F i l e C l e a n e r C l e a n u p < / l i s t e n e r c l a s s > < / l i s t e n e r > . . . < / w e b a p p >

Criando um DiskFileItemFactory O FileCleanerCleanup fornece uma instncia deo r g . a p a c h e . c o m m o n s . i o . F i l e C l e a n i n g T r a c k e r . Este exemplo deve ser usado quando a criao de umo r g . a p a c h e . c o m m o n s . f i l e u p l o a d . d i s k . D i s k F i l e I t e m F a c t o r y . Isto deve ser feito chamando um mtodo parecido com o seguinte:
p u b l i cs t a t i cD i s k F i l e I t e m F a c t o r yn e w D i s k F i l e I t e m F a c t o r y ( S e r v l e t C o n t e x tc o n t e x t , F i l er e p o s i t o r y ){ F i l e C l e a n i n g T r a c k e rf i l e C l e a n i n g T r a c k e r =F i l e C l e a n e r C l e a n u p . g e t F i l e C l e a n i n g T r a c k e r ( c o n t e x t ) ; D i s k F i l e I t e m F a c t o r yf a c t o r y =n e wD i s k F i l e I t e m F a c t o r y ( D i s k F i l e I t e m F a c t o r y . D E F A U L T _ S I Z E _ T H R E S H O L D , r e p o s i t o r y ) ; f a c t o r y . s e t F i l e C l e a n i n g T r a c k e r ( f i l e C l e a n i n g T r a c k e r ) ; r e t u r nf a c t o r y ; }

A desativao de limpeza de arquivos temporrios Para desativar o rastreamento de arquivos temporrios, voc pode definir oF i l e C l e a n i n g T r a c k e rcomo nulo.Conseqentemente, os arquivos criados deixaro de ser rastreado. Em particular, eles deixaro de ser automaticamente eliminado. Interao com scanners de vrus Scanners de vrus em execuo no mesmo sistema que o container web pode causar alguns comportamentos inesperados para aplicaes usando FileUpload. Esta seo descreve alguns dos comportamentos que voc pode encontrar, e oferece algumas idias de como lidar com eles. A implementao padro de FileUpload far com que itens enviados acima de um determinado limite de tamanho para ser gravados no disco. Assim que esse arquivo fechado, qualquer scanner de vrus sobre o sistema vai acordar e inspecion-lo e, potencialmente, colocar em quarentena o arquivo - ou seja, mov-lo para um local especial onde no vai causar problemas. Isso, claro, vai ser uma surpresa para o desenvolvedor do aplicativo, uma vez que o item arquivo enviado no ser mais disponvel para processamento. Por outro lado, os itens enviados abaixo desse mesmo limite ser mantido na memria e, portanto, no ser visto por scanners de vrus. Isso permite que a possibilidade de um vrus que est sendo mantido de alguma forma (embora se ele j gravado no disco, o antivrus seria localizar e inspecion-lo). Uma soluo comumente utilizada deixar de lado um diretrio no sistema em que todos os arquivos carregados sero colocados, e para configurar o antivrus para ignorar o diretrio. Isso garante que os arquivos no sero arrancadas sob a aplicao, mas depois deixa a responsabilidade para a verificao de vrus at o desenvolvedor do aplicativo. Digitalizao dos arquivos enviados em busca de vrus pode, ento, ser realizado por um processo externo, o que pode mover arquivos limpos ou limpo para um local de "aprovado", ou atravs da integrao de um scanner de vrus dentro do prprio aplicativo. Os pormenores da configurao de um processo externo ou a integrao de deteco de vrus numa aplicao esto fora do mbito deste documento.

commons.apache.org/proper/commons-fileupload/using.html

4/5

27/10/13

FileUpload - Usando FileUpload

Assistindo progresso Se voc espera muito grandes uploads de arquivos, ento seria bom para informar aos seus usurios, quanto j recebido. Mesmo pginas HTML permitem implementar uma barra de progresso, retornando um multipart / resposta substituir, ou algo parecido. Assistindo o progresso de upload pode ser feito atravs do fornecimento de um ouvinte progresso:
//C r i au mp r o g r e s s o

s oi t e ma t u a l m e n t el e n d o" +p I t e m s) ; s e (p C o n t e n t L e n g t h= = -1) { S i s t e m a.f o r a.p r i n t l n(" A t a g o r a , " +p B y t e s R e a d+ " b y t e st e n h a ms i d ol i d o s . ") ; } m a i s { S i s t e m a.f o r a.p r i n t l n(" A t a g o r a , " +p B y t e s R e a d+ " d e " +p C o n t e n t L e n g t h + " b y t e st e n h a ms i d ol i d o s . ") ; } } } ; c a r r e g a m e n t o.s e t P r o g r e s s L i s t e n e r(p r o g r e s s L i s t e n e r) ;

Faz um favor e implementar seu primeiro ouvinte progresso, assim como o anterior, porque voc mostra uma armadilha: O ouvinte progresso chamado com bastante freqncia. Dependendo do mecanismo de servlet e outra fbrica ambiente, pode ser chamado para qualquer pacote de rede!Em outras palavras, o ouvinte progresso pode tornar-se um problema de performance! Uma soluo tpica pode ser, para reduzir a actividade de ouvintes progresso. Por exemplo, voc pode emitir uma mensagem apenas, se o nmero de megabytes mudou:
//C r i au mp r o g r e s s o

s oi t e ma t u a l m e n t el e n d o" +p I t e m s) ; s e (p C o n t e n t L e n g t h= = -1) { S i s t e m a.f o r a.p r i n t l n(" A t a g o r a , " +p B y t e s R e a d+ " b y t e st e n h a ms i d ol i d o s . ") ; } m a i s { S i s t e m a.f o r a.p r i n t l n(" A t a g o r a , " +p B y t e s R e a d+ " d e " +p C o n t e n t L e n g t h + " b y t e st e n h a ms i d ol i d o s . ") ; } } } ;

Qual o prximo Esperemos que esta pgina tem proporcionado-lhe uma boa idia de como usar FileUpload em seus prprios aplicativos. Para mais detalhes sobre os mtodos apresentados aqui, assim como outros mtodos disponveis, voc deve consultar osJavaDocs . O uso descrito aqui deve satisfazer a grande maioria dos arquivos precisa de upload. No entanto, voc deve ter exigncias mais complexas, FileUpload ainda deve ser capaz de ajud-lo, com as suas flexveis de personalizao capacidades.

commons.apache.org/proper/commons-fileupload/using.html

5/5

Das könnte Ihnen auch gefallen