Em geral, existem duas maneiras de fazer upload de imagens. Um é escrever o arquivo de imagem no banco de dados e o outro é armazená -lo no diretório do arquivo do servidor. Os arquivos de imagem gravados no banco de dados precisam ser convertidos em um formato de fluxo binário, ocupando espaço no banco de dados e são adequados para o armazenamento de um pequeno número de imagens. Por exemplo, alguns pequenos ícones do sistema têm a vantagem de escrever no banco de dados de que eles são relativamente seguros e não são facilmente excluídos pelos usuários acidentalmente.
Se você armazenar um grande número de imagens, geralmente será feito para salvá -las em uma pasta no servidor. Existem muitas maneiras de concluir o upload, você pode usar o método de streaming e o método FTP e o método FileUpload é usado aqui.
Com diferentes tamanhos do sistema, os métodos de processamento dos arquivos de imagem também são diferentes. Se o número de imagens no sistema não for grande, basta armazenar todas as imagens no mesmo diretório. Se as imagens forem mais acumuladas, você poderá classificar e armazenar as imagens de acordo com a classificação do material, que economizará algum tempo na pesquisa de arquivos no disco.
Ao fazer o upload de imagens para arquivos, você pode fazer upload de fotos diretamente para o diretório, também pode escrever o nome do arquivo e o caminho do arquivo no banco de dados ou criar caminhos de arquivo dinamicamente no programa. Se a empresa exigir que as imagens sejam armazenadas em um servidor especial, é mais apropriado escrever o caminho do arquivo para o arquivo completo. Geralmente, é mais fácil processar se um material (material) corresponde a uma imagem. Se corresponde a várias imagens, ele precisará ser usado em conjunto com a reciclagem. Por um lado, é necessário processar a exibição dinâmica da imagem e, por outro lado, é necessário verificar se a nomeação do arquivo de imagem é duplicada. Além disso, ao processar imagens (carregando, excluindo e modificando), você precisa cooperar com as transações.
A seguir, é apresentada uma introdução importante à implementação mais básica do uso do FileUpload para obter o upload da imagem.
1. Use tags de arquivo no front -end:
<input name = "filename" type = "file" class = "text1" size = "40" maxlength = "40">
2. Defina o formato ENCTYPE do arquivo: multipart/form-data
<name de forma = "itemForm" target = "_ self" id = "itemform" method = "post" action = "servlet/item/fileUploadServlet" ENCTYPE = "Multipart/form-data">
Instruções sobre Enctype = "Multipart/Form-Data":
Se este formato for usado no JSP, o servlet correspondente não poderá usar o request.getParameter () para obter parâmetros. Você deve usar o método parserequest do objeto ServletFileUpload para primeiro analisar os dados no objeto de solicitação e, em seguida, usar o sinalizador ISFormField do elemento analisado e cooperar com o método getFieldName para obter os dados.
3. Implementação do FileUploadServlet:
pacote com.bjpowernode.drp.basedata.web; importar java.io.file; importar java.io.ioException; importar java.util.iterator; importar java.util.list; importar javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; importar org.apache.commons.fileupload.fileitem; importar org.apache.commons.fileupload.disk.diskfileItemFactory; importar org.apache.commons.fileupload.servlet.servletfileUpload; import com.bjpowernode.drp.baseddata.manager.itemManager; import com.bjpowernode.drp.baseddata.manager.itemmanagerImpl; import com.bjpowernode.drp.util.ApplicationException; classe pública FileUploadServlet estende o abstrateItemServlet {private File UploadPath; arquivo privado temppath; @Override public void init () lança servletexception {// Quando o sistema iniciar, inicie a inicialização. Durante a inicialização, verifique se a pasta onde a imagem é carregada e a pasta onde existe os arquivos temporários. Se não existir, crie // Obtenha o caminho físico real correspondente ao diretório raiz uploadPath = new File (getServletContext (). GetRealPath ("upload")); System.out.println ("uploadPath ====" + uploadPath); // se o diretório não existir se (! UploadPath.exists ()) {// crie o diretório uploadpath.mkdir (); } // Diretório temporário // arquivo tempfile = novo arquivo (item.getName ()) construa o objeto temporário temppath = new File (getServletContext (). GetRealPath ("temp")); if (! temppath.exists ()) {temppath.mkdir (); } // Se o método da classe pai não for exibido, não haverá instância do ItemManager, que causará um ponteiro nulo super.init (); } public void Doget (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {DoPost (solicitação, resposta); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Get data from item_upload.jsp, because the encoding format of the uploaded page is different from the general one, using enctype="multipart/form-data" //Form submission uses multipart/form-data, and data cannot be obtained using req.getParameter () // string itemNo = req.getParameter ("itemNo"); //System.out.println("itemno======= " + itemNo); /******************************************* Nesta classe de fábrica, você pode configurar o tamanho do buffer de memória e o diretório onde os arquivos temporários são armazenados. DiskFileItemFactory Factory = new DiskFileItemFactory (); // Tamanho máximo que será armazenado na Memory Factory.SetSizEthReshold (4096); // o local para salvar dados maiores que o getSizeShreshold () factory.setRepository (temppath); // servletfileUpload: responsável pelo processamento de dados de arquivo carregado e encapsulando cada parte dos dados em um objeto FileItem. // Ao receber dados do arquivo carregado, o conteúdo será salvo no cache da memória. Se o conteúdo do arquivo exceder o tamanho do buffer especificado pelo DiskFileItemFactory, // o arquivo será salvo no disco e armazenado como um arquivo temporário no diretório especificado do DiskFileItemFactory. // Depois que os dados do arquivo forem recebidos, o servletupload grava os dados do arquivo no arquivo no diretório de arquivos carregado servetfileUpload upload = new ServletfileUpload (fábrica); // Tamanho máximo antes de uma FileUploadexception será lançada upload.SetSizEMAX (1000000 * 20); / ******************* Analise os dados passados pelo formulário e retorne a lista de dados da coleção de listas: FILEITEM *****************/ Try String itemNo = ""; // iterator iter = fileItems.iterator () Pegue seu iterador //iter.hasnext () Verifique se existem elementos na sequência para (iterator iter = fileItems.iterator (); iter.hasnext ();) {// obtendo o próximo elemento no arquivo de sequência item = (fileitem) iter.next (); // julgue se é informações de arquivo ou texto // é um campo de entrada de formulário comum se (item.isformfield ()) {if ("itemNo" .equals (item.getfieldName ())) {itemNo = item.getString (); }} // é o campo de entrada if (! Item.isformfield ()) {// o nome e o caminho completo do arquivo de arquivo carregado filename = item.getName (); tamanho longo = item.getSize (); // Determine se o arquivo é selecionado se ((nome do arquivo == null || filename.equals ("")) && size == 0) {continuação; } // Interceptar a string como: c: /windows/debug/passwd.log filename = filename.substring (filename.lastindexOF ("//") + 1, filename.length ()); // Salve o arquivo no disco físico do servidor: o primeiro parâmetro é: o caminho completo (excluindo o nome do arquivo). O segundo parâmetro é: nome do arquivo //item.write(File); // Modifique o nome do arquivo e o nome do material são os mesmos, e a extensão do arquivo é forçada a ser gif //item.write(New File (uploadPath, itemNo + ".gif")); // salve o arquivo no diretório sem modificar o nome do arquivo item.write (novo arquivo (uploadpath, nome do arquivo)); // Escreva o nome do arquivo de imagem no banco de dados ItemManager.uploadItemimage (itemNo, nome do arquivo); }} Response.sendRedirect (request.getContextPath () + "/servlet/item/SearchItemServlet"); } catch (Exceção e) {e.printStackTrace (); lançar a nova ApplicationException ("Falha no upload!"); }}} Esta classe herda o abstractItemServlet: a classe pai abstrata de todos os servlets materiais, responsável por instantar o itemManager
/** * A classe pai abstrata de todos os servlets de materiais é responsável por instantar o itemManager * @Author Limin * */public abstract class abstractemServlet estende httpservlet {// Embora não seja thread-sáfe, se estiver leitura, não haverá erros protegidos ItemManager = Null; @Override public void init () lança servletexception {itemManager = new ItemManagerImpl ()}}ItemManagerImpl é uma subclasse que implementa a interface ItemManager. Há um problema com esse modelo de design, que tem otimização salarial, mas aqui não faremos comentários irrelevantes para explicar o upload de fotos.
Resumir:
Sobre o método de inicialização init ():
Quando o servlet é inicializado, o diretório é criado dinamicamente. Aqui está um arquivo de upload e arquivo temporário temppath para o projeto e diretório nos WebApps do Tomcat.
Vale ressaltar que o método super.init () precisa ser chamado aqui (Super não é uma referência ao objeto da classe pai, mas é responsável pela chamada para o método da classe pai); caso contrário, pode causar um ponteiro nulo para a classe.
O upload é executado aproximadamente em três etapas: use o componente FileUpload para analisar o formulário; analise os dados passados pelo formulário e retorne o tipo de dados da coleção de listas: fileItem; finalmente carregue a imagem.
Use o método ISFormField () do FileItem para determinar se é um texto normal ou um arquivo;
Use o FileItem.Write (novo arquivo (uploadPath, nome do arquivo)) para fazer o upload do arquivo. O primeiro parâmetro é: o caminho completo (excluindo o nome do arquivo). O segundo parâmetro é: o nome do arquivo;
Processando dados normais de texto:
if ("itemNo" .equals (item.getfieldName ())) {itemNo = item.getString (); }O upload é uma tecnologia relativamente madura por muitos anos, e existem muitos embalados que podemos usar diretamente em nossos projetos diários, mas entender alguns princípios básicos é essencial.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.