Comentário: O upload de vários arquivos pode ter sido complicado de implementar no passado, mas desde o surgimento do HTML5, ficou muito fácil. Há um bom exemplo abaixo, você pode se referir a ele.
O uso principal é o atributo múltiplo de <input><input type = "arquivo" múltiplo />
Aqui está o código detalhado da página:
<! Doctype html>
<html>
<head>
<meta http-equiv = "content-type" content = "text /html; charset = gb2312" />
<Title> Solução 4-5: Enviando vários arquivos </title>
</head>
<Body>
<forma
Action = "http://10.10.25.31:8080/myupload/uploadphotoservlet" ENCTYPE = "Multipart/form-Data" Method = "post">
<input type = "arquivo" múltiplo /> <entrada
type = "submeter" value = "submeter"> <input type = "reset" value = "reset">
</morm>
</body>
</html>
Código detalhado do fundo Java:
importar java.io.file;
importar java.io.ioException;
importar java.text.simpledateFormat;
importar java.util.calendar;
importar java.util.date;
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.fileUploadexception;
importar org.apache.commons.fileupload.disk.diskfileItemFactory;
importar org.apache.commons.fileupload.servlet.servletfileUpload;
/**
* Classe de implementação do servlet UPLOPPHOTOSERVET
*/
classe pública UPLOPLOTPHOTOSERVLETETENDE HTTPSERVET {
private estático final serialversionUid = 1L;
/**
* @see httpServlet#httpServlet ()
*/
public uploadphotoservlet () {
super();
// TODO Construtor GOERATADO AUTO ESTUB
}
/**
* @see httpServlet#Doget (solicitação httpServletRequest, resposta httpSletResponse)
*/
Void protegido Doget (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {
// TODO Method Stub
DoPost (solicitação, resposta);
}
/**
* @see httpServlet#DoPost (solicitação httpServletRequest, resposta httpSertletResponse)
*/
@Suppresswarnings ("sem controle")
DoPost do vazio protegido (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {
String imagePath = "c: // uploadfile // image //"+getEachdate ()+"//"; // gerar pastas por data
FILE UPLOPLETPATH = novo arquivo (ImagePath);
if (! uploadPath.exists ()) {
uploadPath.mkdirs ();
}
Arquivo tmp = novo arquivo ("c: // tmp //");
if (! tmp.exists ()) {
tmp.mkdirs ();
}
DiskFileItemFactory Factory = new DiskFileItemFactory (); // Crie uma fábrica de disco
Factory.SetRepository (TMP); // Defina o caminho do cache do arquivo
Factory.SetSizETHreshold (10 * 1096); // O valor crítico padrão de salvar arquivos na memória ou pastas temporárias do disco é 10240, ou seja, 10kb
ServletfileUpload sfu = new ServletfileUpload (fábrica); // Crie ferramentas de processamento
sfu.SetSizEMAX (10*1024*1024); // O tamanho máximo do arquivo que pode ser recebido pelo servidor, -1 significa sem limite superior
String filename = null;
tentar {
List <FileItem> list = sfu.parserequest (request); // análise
if (list.size () <1) {
retornar;
}
for (int j = 0; j <list.size (); j ++) {
FileItem item = list.get (j);
arquivo de arquivo = item.getName ();
if (filename.equals ("")) {
request.getRequestDispatcher ("/com/visualizerphoto.jsp"). Forward (solicitação, resposta);
retornar;
}
int pos = filename.lastindexof ("."); // Obtenha o formato do arquivo de imagem
if (pos> 0) {
Data data = new Date ();
FILENAME = ImagePath+Date.getTime ()+FILENAME.SUBSTRING (POS);
}
System.out.println ("item:"+item);
item.write (novo arquivo (nome do arquivo)); // gravar no disco
}
} catch (fileUploadexception e) {
E.PrintStackTrace ();
} catch (Exceção e) {
E.PrintStackTrace ();
}
}
// 13-11-15
public static string getEachdate () {
Calendário cal = calendar.getInstance ();
cal.add (calendário.date, 0);
String ontem = novo SimpleDateFormat ("AAAA-MM-DD") .Format (Cal Cal
.gettime ());
String [] datas = ontem.split ("-");
String realdate = datas [0] .Substring (2, 4) + "-" + datas [1] + "-"
+ datas [2];
retornar realdate.Trim ();
}
}
Aqui está a renderização: