Uso do upload de arquivos da web POST. Diferentemente dos formulários de envio de postagem, o upload de arquivos requer definir o atributo ENCTYPE do formulário como multipart/formulário. Como os arquivos carregados serão relativamente grandes, esse parâmetro precisa ser definido para especificar que o navegador usa upload binário. Se não estiver definido, a propriedade ENCTYPE padroniza o Application/X-Www-Form-Urlencoded. O uso do navegador usará o ASCII para enviar dados para o servidor, resultando na falha no envio do arquivo.
Para fazer upload de um arquivo, use o domínio do arquivo (<input Type = 'FILE'/> e defina o Enctype do formulário para multipart/form-dados.
A página de upload do cliente é mostrada na figura:
O código é o seguinte:
upload.html
<! Doctype html public "-// w3c // dtd html 4.01 transição // pt"> <html> <head> <title> file file </title> <meta http-equiv = "palavras-chave" content = "keyword2, palavra-chave", keywords "> <meta-metanv =" conteúdo "content =" keyword2, palavra-chave " http-equiv = "content-type" content = "text/html; charset = utf-8"> <link rel = "Stylesheet" type = "text/css" href = "css/style.css"> </ad Head> <body> <formulário "=" servlet/uploadServlet "Method"> </ad> align = "Center"> <br/> <Fieldset> <legend> File de upload </legend> <br/> <div class = 'line'> <div alinhe = 'esquerda'> File de upload 1 </div> <div alinh = 'esquerdo'> <input type = "file" = "file1"> </div = </div> clássle '> align = 'esquerda'> arquivo de upload 2 </div> <div align = 'esquerd'> align = 'esquerd'> <input type = "file" name = "file2"> </div> </div> <div class = 'line'> <div align = 'esquerda'> upload file = 1 names> <name) class = 'line'> <div alinhe = 'esquerda'> Arquivo de upload Descrição 2 </div> <div alinhe = 'esquerda'> <input type = "text" name = "description2"> </div> </div> <div class = 'line'> <div align = 'esquerda'> upload Arquivo 2 </div> <nign = 'left'> </align = 'esquerd'> upload ' value = "FILHO DE ALGUNAS"> </div> </div> </fieldset> </div> </morm> </body> </html>
O código executado pelo cliente é muito simples e o servidor é mais complicado. Para obter o conteúdo, a solicitação enviada pelo navegador deve ser analisada de acordo com o formato especificado pelo protocolo HTTP.
É mais problemático analisar fluxos binários. Muitas bibliotecas de classes já concluíram este trabalho. Por exemplo, o SmartUpload e o Apache Commons FileUpload.smartUpload é uma biblioteca de classes comerciais. Os dados são armazenados na memória durante a análise do processo de solicitação, para que sejam mais rápidos, mas o excesso de memória ocorre ao fazer o upload de arquivos maiores. O Apache Commons FileUpload é uma biblioteca de classes de código aberto e gratuita. Algumas estruturas, como o Struts, integram a biblioteca de classes do Apache Common FileUpload para implementar uploads de arquivos.
Como mostrado na figura:
O código é o seguinte:
pacote com.helloweenvsfei.servlet; importar java.io.file; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStream; import java.io.outputStream; import java.io.prwriter; import java.io.io.aRlaNeNeNeReN; javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServLeQuest; import javax.servlet.http.htpsletLoTroSponse; org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 7523024737218332088L; Public void Doget (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {Response.Setcharacterencoding ("UTF-8"); Response.getWriter (). println ("Por favor, carregue o arquivo no post"); } @Suppresswarnings ("desmarcado") public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {file file1 = null, file2 = null; String Descrição1 = NULL, Descrição2 = NULL; Response.Setcharacterencoding ("UTF-8"); Response.setContentType ("Text/html"); PrintWriter out = Response.getWriter (); out.println ("<! doctype html public/"-// w3c // dtd html 4.01 transitório // en/">"); out.println ("<html>"); out.println ("<head> <title> um servlet </ititle> </ad Head>"); out.println ("<link rel = 'stylesheet' type = 'text/css' href = '../css/style.css'>"); out.println ("<body>"); out.println ("<div align = Center> <br/>"); out.println ("<Fieldset style = 'Largura: 90%'> <legend> File </legend> <br/>"); out.println ("<div class = 'line'>"); out.println ("<div align = 'esquerda' class = 'leftDiv'> upload log: </div>"); out.println ("<div align = 'esquerda' class = 'RightDiv'>"); // Use o objeto DiskFileUpload para analisar o DiskFileUpload DiskFileUpload = new DiskFileUpload (); tente {// coloque o resultado analisado na lista da lista <FileItem> list = diskfileUpload.parsequest (request); out.println ("Rastreie todos os fileIitems ... <br/>"); // Rastreie a lista de todos os fileItems no arquivo FileItem: List) {if (FileItem.isformfield ()) {// se for um campo de texto se ("description1" .equals (fileItem.getfieldName ())) {// se o nome FileItem é descrição.Println ("Travel para1)) {// se o nome do arquivo é Descrição1 = new String (fileItem.getString (). getBytes (), "UTF-8"); } if ("description2" .equals (fileItem.getfieldName ())) {// se o arquivo fileItem for descrição2 out.println ("viaje para descrição2 ... <br/>"); Descrição2 = new String (fileItem.getString (). getBytes (), "UTF-8"); }} else {// Caso contrário, para o campo de arquivo se ("file1" .equals (FILEITEM.GETFIFFILE ())) {// Objeto de arquivo criado pelo arquivo do arquivo do cliente RemoteFile = new File (new String (FileItem.getName (). getBytes (), "utf-8"); out.println ("Viagem para o arquivo1 ... <br/>"); out.println ("Localização do arquivo do cliente:" + remotefile.getabsolutepath () + "<br/>"); // Arquivo do lado do servidor, coloque na pasta de upload file1 = new File (this.getServletContext (). GetRealPath ("anexamento"), remotefile.getName ()); file1.getParentFile (). mkdirs (); file1.createNewFile (); // Escreva um arquivo e escreva o conteúdo do arquivo do FileItem no arquivo inputStream ins = fileItem.getInputStream (); OutputStream OUS = new FileOutputStream (File1); tente {byte [] buffer = novo byte [1024]; int len = 0; while ((len = ins.read (buffer))> -1) ous.write (buffer, 0, len); out.println ("salvar arquivo" + file1.getabsolutepath () + "<br/>"); } finalmente {ous.close (); ins.close (); }} if ("file2" .equals (fileItem.getfieldName ())) {// Objeto de arquivo criado pelo arquivo do arquivo do cliente Remotefile = new File (new String (fileItem.getName (). getBytes (), "utf-8"); out.println ("Viagem para o arquivo2 ... <br/>"); out.println ("Localização do arquivo do cliente:" + remotefile.getabsolutepath () + "<br/>"); // Arquivo do lado do servidor, coloque a pasta de upload file2 = new File (this.getServletContext (). GetRealPath ("anexamento"), remotefile.getName ()); file2.getParentFile (). mkdirs (); file2.CreateNewFile (); // Escreva um arquivo e escreva o conteúdo do arquivo do FileItem no arquivo inputStream ins = fileItem.getInputStream (); OutputStream OUS = new FileOutputStream (File2); tente {byte [] buffer = novo byte [1024]; int len = 0; while ((len = ins.read (buffer))> -1) ous.write (buffer, 0, len); out.println ("salvar arquivo" + file2.getabsolutepath () + "<br/>"); } finalmente {ous.close (); ins.close (); }}}} out.println ("A análise da solicitação está concluída"); } catch (fileUploadexception e) {// TODO BLOCO DE CATAGEM AUTOMENTADO E.PRINTSTACKTRACE (); } out.println ("</div>"); out.println ("<div align = 'esquerda' class = 'leftDiv'> file1: </div>"); out.println ("<div align = 'esquerda' class = 'RightDiv'>"); out.println ("<a href = '" + request.getContextPath () + "/atting/" + file1.getName () + "' alvo = _blank>" + file1.getName () + "</a>"); out.println ("</div>"); out.println ("</div>"); } if (file2! = null) {out.println ("<div class = 'line'>"); out.println ("<div align = 'esquerda' class = 'leftDiv'> file2: </div>"); out.println ("<div align = 'esquerda' class = 'RightDiv'>"); out.println ("<a href = '" + request.getContextPath () + "/attion/" + urlencoder.encode (file2.getName (), "utf-8") + "alvo = _blank>" + file2.getname () + "</a>"); out.println ("</div>"); out.println ("</div>"); } out.println ("<div class = 'line'>"); out.println ("<div align = 'esquerda' class = 'leftDiv'> description1: </div>"); out.println ("<div align = 'esquerda' class = 'RightDiv'>"); out.println ("<div align = 'esquerda' class = 'RightDiv'>"); out.println ("<div align = 'esquerda' class = 'leftDiv'> description2: </div>"); out.println ("<div align = 'esquerda' class = 'RightDiv'>"); out.println (description2); out.println ("</div>"); out.println ("</div>"); out.println ("</fieldset> </div>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.Close (); }}O efeito de operação do programa é mostrado na figura:
Este artigo foi compilado em "Resumo das técnicas de operação de upload de Java", e todos são convidados a aprender e ler.
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.