Este artigo compartilha os códigos específicos para o upload de vários arquivos Javaweb e embalagem Zip e download para sua referência. O conteúdo específico é o seguinte
Funções de upload e download de arquivos são frequentemente usadas em projetos. Este artigo resume as cenas no ambiente Javaweb, as funções de upload e embalagens de upload e lote de vários arquivos, incluindo a recepção e as peças de back-end.
Primeiro de tudo, vamos deixar claro:
A página não pode ser atualizada diretamente para o AJAX, e as solicitações de download e upload não podem ser enviadas. O upload e o download devem ser implementados com base em toda a solicitação de página. Essa função é geralmente alcançada por formulários de construção em projetos.
1. Carregue vários arquivos
Os requisitos do projeto são realizar a função de upload de várias imagens. Depois de me referir aos muitos métodos de plug-in encontrados na Internet, decidi escolher a solução original de upload do jQuery. Siga as etapas abaixo para postar o código específico.
1. Parte html (pode ser omitida para construir com JS)
<form id = "uploadForm" Method = "post" Enctype = "Multipart/Form-Data"> <input type = "arquivo" name oculto = "fileImage" múltiplo/> <a href = "javascript: void (0);" " rel = "Nofollow externo" rel = "Nofollow externo" id = "filesubMit" onclick = "UPLOUPFILEMULTI ()"> Informações de upload </a> </morm>
Existem algumas explicações:
1.
2. No exemplo, use tags para criar o envio
2. JS parte
var formData = new FormData ($ ("#UPLOPLFFORM") [0]); formData.append ("dobrname", "datumlist"); // Defina o nome da pasta pai formData.append ("OdererCode", SelfOrderCode); formData.append ("datumtype", datumtype); $. Ajax ({type: "Post", data: FormData, url: "order/datumlist/batchinsertDatumlists", contenttty,, URL: (Result.success) {// Limpe o conteúdo da caixa $ ("FileImage"). }, erro: function () {SHOWRORTOAST ('Solicitação falhou!')}}); Existem algumas explicações acima:
1. Var formData = new FormData ($ ("#UPLOPLFFORM") [0]);
2. Use formData.append ("OdererCode", SelfOrderCode); Para adicionar outros parâmetros
Back -end de java
MultiparthttpServletRequest mRequest = (multiparthttpServletRequest) solicitação; list <multipartfile> arquivos = mrequest.getfiles ("fileImage");Existem algumas explicações acima:
1. Obtenha o multiparthttpServletRequest, correspondente ao nome da tag de arquivo
2. Download em lote de arquivos
Neste projeto, o requisito é baixar um lote de arquivos em lotes. Use o ZIP para comprimir o arquivo no servidor e faça o download do arquivo para o cliente.
Para consulta on -line, o uso da classe de saída de arquivos do Java não pode resolver o problema dos nomes de arquivos iluminados em arquivos compactados. Solução: use o pacote Ant.jar. Ao criar um arquivo compactado, você pode definir o formato de codificação do arquivo e o problema dos nomes de arquivos iluminados será resolvido.
Parte html (pode ser omitida para construir com JS)
<form id = "uploadForm" Method = "Post" Enctype = "Multipart/Form-Data"> <div> <input type = "Hidden" name = "OrderCode"/> <input type = "Hidden" name = "datumtype"/> <a href = "Javascript: void (0);" "; rel = "Nofollow externo" rel = "Nofollow externo" OnClick = "BatchDatumListDownload ()"> Batchdown </a> </div> </form>
JS parte
// Função de download em lote BatchDatumListDownload () {var param = {}; param.datumtype = $ ("#datumtypeq"). val (); if (param.datumtype == -1) {param.datumtype = null; // consulta tudo} param.orderCode = selfOrderCode; $ ("#UPLOPLEFFORM ENTRADO [nome = OrderCode]"). Val (param.orderCode); $ ("#UPLOPLEFFORM ENTRADO [nome = datumtype]"). val (param.datumtype); var form = $ ("#uploadForm") [0]; form.action = "order/datumlist/batchdownloaddatumlist"; form.method = "post"; form.submit (); // formulário submeter}Parte de back -end
public void BatchDownloadDatumList (DatumListVo DatumListVo, HttpServletResponse resposta) {try {// Lista de arquivos de consulta <datumlistvo> volist = datumlistservice.QueryDatumLists (DatumListVo); // Lista de arquivos de compactação <File> arquivos = new ArrayList <> (); para (DATUMLISTVO: Volist) {arquivo de arquivo = novo arquivo (vo.getDatumurl ()); files.add (arquivo); } String filename = datumlistvo.getorderCode () + "_" + datumlistvo.getDatumtype () + ".zip"; // Crie um arquivo temporário para download embalado no lado do servidor String globalUploadpath = ""; String osName = System.getProperty ("os.name"); if (osName.TolowerCase (). } else if (osName.tolowerCase (). } String outfilepath = globalUploadPath + file.separator + arquivo de arquivo; Arquivo de arquivo = novo arquivo (outfilePath); // FILO DE SAUTRO DE FILO FILEOUTTUPTSTREAM EXTREAM = NOVO FILEOUTPUTTREAM (FILE); // compactar fluxo zipOutputStream ToClient = new ZipOutputStream (OutStream); // Defina o caractere que codifica no arquivo compactado, caso contrário, ele ficará iluminado toClient.SetEncoding ("GBK"); Ziputil.zipfile (arquivos, toClient); toClient.close (); superam.close (); Ziputil.downloadzip (arquivo, resposta); } catch (Exceção e) {e.printStackTrace (); }}Entre eles ziputil.java
/** * Arquivos na lista de arquivos compactados * * @Param Files * @Param OutputStream * @THOWSox IOException */public static void zipfile (arquivos da lista, zipOutputStream outputStream) lança ioexception, servletexception {try {int size = files.size (); // arquivos na lista compactada para (int i = 0; i <tamanho; i ++) {arquivo file = (file) files.get (i); tente {zipfile (arquivo, outputStream); } catch (Exceção e) {Continue; }}} catch (Exceção e) {tiro e; }}/** * Escreva o arquivo no arquivo zip * * @param inputfile * @param outputStream * @throws exceção */public static void zipfile (arquivo de entrada, zipOutputStream outputStream) lança IoException, servleTex (Try {if (inputFile.exists () () {se servexcept (if (if (if (inputfile.exists) () {severleTex (if (if (inputFile.exists) () {iftin (ifp) (ift) (ift) (iftUsTReSt) lança iOexcept. new FileInputStream (InputFile); BufferInputStream binstream = new bufferInputStream (Instream); Entrada zipentry = new Zipentry (inputFile.getName ()); outputStream.putNextEntry (entrada); final int max_byte = 10 * 1024 * 1024; // O fluxo máximo é de 10m de comprimento Tottal = 0; // a capacidade do fluxo de aceitação int streamnum = 0; // o número de fluxos que precisam ser separados int leArtByte = 0; // o número de caracteres deixados no arquivo byte [] inoutbyte; // A matriz de bytes aceita os dados do arquivo streamtotal = binstream.Available (); // O número máximo de caracteres do fluxo é obtido através do método disponível streamnum = (int) math.floor (streamtotal /max_byte); // O número de caracteres deixados a serem separados para obter o arquivo de fluxo LeaveByte = (int) StreamTotal % max_byte; // Após dividir o arquivo, o número restante if (streamnum> 0) {for (int j = 0; j <streamnum; ++ j) {inoutbyte = new byte [max_byte]; // Leia no fluxo e salve -o no Byte Array binstream.read (Inoutbyte, 0, max_byte); outputStream.Write (Inoutbyte, 0, max_byte); // escreva o fluxo}} // escreva os dados restantes do fluxo inoutbyte = new byte [leavebyte]; binstream.read (inoutbyte, 0, leartbyte); outputStream.Write (InoutByte); outputStream.CloseEntry (); // fecha a entrada de zip atual e posiciona o fluxo para gravar o próximo binstream.close (); // fechar o Instream.close (); }} else {lança nova servletexception ("o arquivo não existe!"); }} catch (ioexception e) {tiro e; }}/** * Faça o download do arquivo embalado * * @param arquivo * @param Resposta */public static void Downloadzip (arquivo de arquivo, httpServletResponse resposta) {try {// download do arquivo como um fluxo. BufferInputStream fis = new bufferInputStream (new FileInputStream (file.getPath ()); byte [] buffer = novo byte [fis.Available ()]; fis.read (buffer); fis.close (); // resposta clara da resposta da resposta.Reset (); OutputStream toClient = new BufferoudOutputStream (Response.getOutputStream ()); Response.setContentType ("Application/Octet-Stream"); Response.setheader ("Content-Disposition", "Applement; filename =" + file.getName ()); toClient.Write (buffer); toClient.flush (); toClient.close (); file.Delete (); // Exclua o arquivo do lado do servidor gerado} Catch (IoException Ex) {Ex.PrintStackTrace (); }} Os acima atendem basicamente os requisitos para fazer upload e download de arquivos.
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.