의견 : 여러 파일을 업로드하는 것은 과거에 구현하기가 복잡했을 수 있지만 HTML5가 출현 한 이후 매우 쉬워졌습니다. 아래에는 좋은 예가 있습니다. 참조 할 수 있습니다.
주요 용도는 <input>의 다중 속성입니다<입력 유형 = "파일"다중 />
페이지의 자세한 코드는 다음과 같습니다.
<! doctype html>
<html>
<헤드>
<meta http-equiv = "content-type"content = "text /html; charset = gb2312" />
<title> 솔루션 4-5 : 여러 파일 보내기 </title>
</head>
<body>
<양식
action = "http://10.10.25.31:8080/myupload/uploadphotoservlet"Enctype = "multipart/form-data"method = "post">
<입력 유형 = "파일"다중 /> <입력
type = "제출"값 = "제출"> <입력 유형 = "Reset"value = "Reset">
</form>
</body>
</html>
Java 배경의 자세한 코드 :
import java.io.file;
import java.io.ioexception;
import java.text.simpledateformat;
java.util.calendar 가져 오기;
import java.util.date;
Java.util.list 가져 오기;
javax.servlet.servletexception import;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import org.apache.commons.fileupload.fileitem;
import org.apache.commons.fileupload.fileuploadexception;
import org.apache.commons.fileupload.disk.diskfileitemfactory;
import org.apache.commons.fileupload.servlet.servletfileupload;
/**
* 서블릿 구현 클래스 업로드 포토 서비스 레드
*/
공개 클래스 uploadphotoservlet 확장 httpservlet {
개인 정적 최종 최종 긴 SerialversionUID = 1L;
/**
* @httpservlet#httpservlet ()
*/
public uploadphotoservlet () {
감독자();
// TODO 자동 생성 생성자 스텁
}
/**
* @@see httpservlet#doget (httpservletrequest request, httpservletresponse 응답)
*/
보호 된 void doget (httpservletrequest request, httpservletresponse 응답) servletexception, ioexception {
// TODO 자동 생성 메소드 스텁
dopost (요청, 응답);
}
/**
* @ @See httpservlet#dopost (httpservletrequest request, httpservletresponse 응답)
*/
@suppresswarnings ( "확인되지 않은")
보호 된 void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {
String ImagePath = "C : // uploadfile // image //"+geteachDate ()+"//"; // 날짜 별 폴더 생성
파일 UPLOADPATH = 새 파일 (imagePath);
if (! uploadpath.exists ()) {
uploadpath.mkdirs ();
}
file tmp = 새 파일 ( "c : // tmp //");
if (! tmp.exists ()) {
tmp.mkdirs ();
}
diskfileitemfactory factory = new diskfileitemfactory (); // 디스크 공장 생성
Factory.SetRepository (TMP); // 파일 캐시 경로를 설정합니다
factory.setsizethreshold (10 * 1096); // 메모리에서 파일을 저장하는 기본 임계 값 또는 디스크의 임시 폴더는 10240, 즉 10KB입니다.
servletfileupload sfu = 새로운 servletfileupload (Factory); // 처리 도구 생성
sfu.setsizemax (10*1024*1024); // 서버에서 수신 할 수있는 최대 파일 크기는 상한이 없음을 의미합니다.
문자열 filename = null;
노력하다 {
List <fileitem> list = sfu.parserequest (요청); // 분석
if (list.size () <1) {
반품;
}
for (int j = 0; j <list.size (); j ++) {
fileItem item = list.get (j);
filename = item.getName ();
if (filename.equals ( "")) {
request.getRequestDispatcher ( "/com/visualizerphoto.jsp"). FORMPER (요청, 응답);
반품;
}
int pos = filename.lastindexof ( "."); // 이미지 파일 형식을 가져옵니다
if (pos> 0) {
날짜 = 새 날짜 ();
filename = imagePath+date.gettime ()+filename.substring (pos);
}
System.out.println ( "항목 :"+항목);
item.write (새 파일 (filename)); // 디스크에 쓰기
}
} catch (fileUploadexception e) {
e.printstacktrace ();
} catch (예외 e) {
e.printstacktrace ();
}
}
// 13-11-15
public static string geteachdate () {
Calendar Cal = Calendar.getInstance ();
cal.add (calendar.date, 0);
String 어제 = 새로운 simpledateformat ( "yyyy-mm-dd") .format (cal
.gettime ());
문자열 [] 날짜 = 어제 .split ( "-");
문자열 realDate = 날짜 [0] .Substring (2, 4) + "-" + 날짜 [1] + "-"
+ 날짜 [2];
retud realdate.trim ();
}
}
렌더링은 다음과 같습니다.