Dieser Artikel ist in zwei Aspekte unterteilt, um zu erklären:
1. Java implementiert ein dynamisches Hochladen mehrerer Dateien
2. Lösen
Als Referenz ist der spezifische Inhalt wie folgt
1. Laden Sie mehrere Dateien dynamisch hoch hoch
<form name = "xx" action = "<c: url value = '/up3Servlet' //>" method = "post" engType = "MultiPart/Form-Data"> <table id = "tb"> <tr> <tr> <Td> Datei: </td> <td> <input type </tr> </table> <br/> <Eingabe type = "button" onclick = "_ enden ();" value = "Upload"> <Eingabe onclick = "_ add ();" type = "button" value = "add"> </form> </body> <script type = "text/javaScript"> Funktion _add () {var tb = document.getElementById ("TB"); // Schreiben Sie eine Zeile var tr = tb.insertrow (); // Spalte schreiben var td = tr.insertcell (); // Daten schreiben td.innerhtml = "Datei:"; // eine neue TD var td2 = tr.insertcell () deklarieren; // Schreiben Sie eine Eingabe td2.innerHtml = '<Eingabe type = "Datei" name = "Datei"/> <schalttaste onclick = "_ del (this);"> löte </button>'; } function _del (btn) {var tr = btn.parentnode.parentnode; //alert(tr.tagname); // Erhalten Sie das Index von TR in der Tabelle var index = tr.rowIndex; // var tb = document.getElementById ("tb") löschen; TB.Deleterow (Index); } function _submit () {// transpraverse alle Dateien var Dateien = document.getElementsByName ("Datei"); if (files.length == 0) {alert ("Keine Datei, die hochgeladen werden kann"); false zurückgeben; } für (var i = 0; i <files.length; i ++) {if (Dateien [i] .Value == "") {alert (""+(i+1)+"Dateien können nicht leer sein"); false zurückgeben; }} document.forms ['xx']. subine (); } </script> </html>Durch alle Dateien zum Hochladen durchführen
2. Lösen Sie das Problem des doppelten Dateinamens
Paket cn.hx.servlet; import java.io.file; import java.io.ioxception; import Java.io.printwriter; import Java.util.ArrayList; import Java.util.list; importieren java.util.uuid; import. javax.servlet.http.httpServletRequest; import javax.servlet.http.httpsertresponse; import org.apache.commons.FileUpload.FileItem; import org.apache org.apache.commons.FileUpload.servlet.servletFileUpload; import org.apache.commons.io.fileutils; UpimgServlet erweitert Httpservlet {public void dopost (httpletRequestanfrage, htttpletPletRespect) -Anthrows -ServletException, Ioexceception {Axceception {Axceception {Axceception {Axication {Axication {-Sthrows -Reaktion) Reaktion, IOEXCTION {AUSCECTION {AUSGEBORDE AUSGABE), IOEXCTION UNTER request.setcharactercoding ("utf-8"); String path = getServletContext (). GetRealPath ("/up"); DiskFileItemFactory disk = new diskFileItemFactory (1024*10, neue Datei ("d:/a")); ServletFileUpload up = new ServletFileUpload (Festplatte); try {list <FileItem> list = up.ParSequest (Anfrage); // nur Bilder empfangen*.jpg-iamge/jpege., Bmp/imge/bmp, png, list <string> imgs = new ArrayList <string> (); für (FileItem -Datei: Liste) {if (Datei.getContentType (). Enthält ("Image/")) {String Dateiname = Datei.getName (); Dateiname = Dateiname.substring (Dateiname.lastIndexof ("//")+1); // Erweiterungsstring extname = fileName.substring (fileName.lastIndexof (".")); //. JPG // Uuid String uUid = uUid.randomuuid (). ToString (). Ersatz ("-", ""); // neuer Name String newname = uUid+extname; // UUID wird verwendet, um einen neuen Ordnernamen zu generieren, sodass das doppelte Name -DateiUtils.copyInputStreamtoFile (Datei.getInputStream (), neue Datei (Pfad+"/"+NewName) nicht verursacht wird. // in die Auflistung von Imgs.Add (NewName); } file.delete (); } request.setAttribute ("imgs", IMGS); Request.GetRequestDispatcher ("/JSPS/imgs.jsp"). Forward (Request, Antwort); } catch (Ausnahme e) {e.printstacktrace (); }}}Das obige implementiert das Upload von Java Multi-File, das das Problem der doppelten Namen der Datei löst. Ich hoffe, es wird für das Lernen aller hilfreich sein.