Este artigo compartilha o código específico para Java para implementar a função de upload e download de arquivos para sua referência. O conteúdo específico é o seguinte
O front-end usa a propriedade Enctype do formulário para modificar o método de entrega de dados no formulário "fluxo" binário. O servidor (servlet) obtém as informações de fluxo através do getInputStream () e usa as operações básicas do fluxo de E/S Java para gravar o fluxo em uma temperatura de arquivo criada temporariamente pelo servidor. Em seguida, use as operações básicas de arquivo novamente para ler e interceptar o conteúdo do arquivo temporário, crie o arquivo correspondente com base nas informações e escreva as informações específicas lidas. Ao fazer o download, encontre o arquivo correspondente no servidor com base no nome do arquivo enviado e, em seguida, produza -o para a página de acordo com o fluxo de saída, e defina o tipo de resposta e o cabeçalho do servlet.
O processo de transmissão específico é o seguinte:
A parte da informação do fluxo é:
O código específico é o seguinte:
Código front-end:
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> Insira o título aqui </title> <script src = "js/jquery.js"> </script> </head> <body> <form> " Enctype = "Multipart/Form-Data"> <table> <tr> <td> Por favor, selecione O upload Arquivo: </td> <td> <input id = "myfile" name = "myfile" type = "file" value = ""/> </td> <td> <input Typ = submit " <tr> <td> $ {info} </td> </tr> </tabela> </morm> Download do arquivo: <a href = "fileLoadownservlet?Faça o upload da parte do servlet (núcleo)
@WebServlet ("/FileUpServlet") Classe public FileUpServlet estende httpServlet {private estático final serialversionuid = 1L; / ** * @see httpServlet#httpServlet () */ public fileUpServlet () {super (); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, resposta); } / ** * @see httpServlet#DoPost (solicitação httpServletReQuest, httpServletResponse resposta) * / Proteged DoPost (httpservleTrequest Solicy, httpServletResponse Response) lança servicexception, IoException {//dodo AutOutronsonse) request.setcharacterencoding ("UTF-8"); InputStream filesource = request.getInputStream (); // solicitação obtém informações de fluxo string tempname = "d:/temp"; // tempfile representa armazenamento temporário de arquivos tempfile = novo arquivo (tempname); b [] = novo byte [1024]; int n; while ((n = filesource.read (b))! = -1) // Leia 1024 bytes a partir do fluxo de saída a cada vez até terminar de ler {outputStream.Write (b, 0, n); } outputStream.close (); filesource.close (); // Fechar o fluxo de entrada e saída/*Os seguintes são operações específicas de arquivo, principalmente para analisar arquivos temporários gerados temporários, e a maior parte do conhecimento é o conteúdo do fluxo de entrada e saída Java! */RandomAccessFile RandomFile = new RandomAccessFile (TempFile, "r"); // fluxo aleatório, especifique para ler arquivos temporários, leia somente RandomFile.readLine (); // leia a primeira linha, INVENIDEX = STRINGEXEXONFET = RandomFile.ReadLine (); // Leia a segunda linha Int INTIDEX = STR.LASTINDINDEXONF = str.LastIndexOf ("/" "); // Especifique a localização do nome de dados de dados necessário nome = str.substring (BEGNIDEX, endIndex); // interceptar o nome do arquivo // reposicionar o arquivo Pointer e obtiver o arquivo RandomFile.Seek (0); // arquivo POINTE (FILE LONETEXT = 0; -1 && i <= 4) {if (n == '/n') {startxt = Randomfile.getFilePointer (); && j <= 2) {endText--; System.out.println (RealPath); Randomfily.seek (StartExt); Timed = New SimpletateFormat ("Aaaia-MM-DD: MM: SS"); request.getRequestDispatcher ("/fildeop.jsp"). Forward (solicitação, resposta);Seção de download
Protegido void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {// todo automático método string string filename = request.getParameter ("nome do arquivo"); String Path = getServletContext (). GetRealPath ("/")+"imagens/"; Arquivo de arquivo = novo arquivo (caminho+nome do arquivo); // arquivo if (file.exists ()) {Response.setContentType ("Application/x-msDownload"); // Defina o tipo de resposta, aqui está o tipo de download Response.setheader ("Content-Disposition", "Applement; nome do arquivo =/" "+nome do arquivo+"/""); // Abra inputStream inputStream = new FileInputStream (FILE); ServletOutputStream outputStream = Response.getOutputStream (); byte b [] = novo byte [1024]; int n; while ((n = inputStream.read (b))! = -1) {outputStream.Write (b, 0, n); } outputStream.close (); inputStream.close (); } else {request.setAttribute ("resultado", "o arquivo não existe! Download falhou!"); request.getRequestDispatcher ("/fildeop.jsp"). Forward (solicitação, resposta); }}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.