일반적으로 이미지를 업로드하는 두 가지 방법이 있습니다. 하나는 이미지 파일을 데이터베이스에 작성하고 다른 하나는 서버 파일 디렉토리에 저장하는 것입니다. 데이터베이스에 작성된 이미지 파일은 이진 스트림 형식으로 변환되어 데이터베이스 공간을 점유해야하며 소수의 이미지를 저장하는 데 적합합니다. 예를 들어, 시스템의 일부 작은 아이콘은 데이터베이스에 비교적 안전하고 우연히 사용자가 쉽게 삭제할 수 없다는 데이터베이스에 글을 쓰는 장점이 있습니다.
많은 수의 이미지를 저장하면 일반적으로 서버의 폴더에 저장하는 것이 완료됩니다. 업로드를 완료하는 방법에는 여러 가지가 있으며 스트리밍 방법과 FTP 메소드를 사용할 수 있으며 FileUpload 메소드가 여기에서 사용됩니다.
시스템 크기가 다르면 이미지 파일의 처리 방법도 다릅니다. 시스템의 사진 수가 크지 않은 경우 모든 사진을 동일한 디렉토리에 저장하십시오. 사진이 더 많이 축적되면 자료 분류에 따라 사진을 분류하고 저장할 수있어 디스크에서 파일을 검색하는 데 시간이 걸립니다.
파일에 사진을 업로드 할 때 디렉토리에 사진을 직접 업로드 할 수 있거나 이미지 파일 이름과 파일 경로를 데이터베이스에 작성하거나 프로그램에서 파일 경로를 동적으로 만들 수 있습니다. 회사가 이미지를 특수 서버에 저장 해야하는 경우 파일 경로를 전체 파일에 작성하는 것이 더 적절합니다. 일반적으로 재료 (재료)가 그림에 해당하는 경우 처리하기가 더 쉽습니다. 여러 그림에 해당하는 경우 재활용과 함께 사용해야합니다. 한편으로는 그림의 동적 표시를 처리해야하며 다른 한편으로는 그림 파일의 이름이 복제되었는지 확인해야합니다. 또한 이미지를 처리 할 때 (업로드, 삭제 및 수정) 트랜잭션과 협력해야합니다.
다음은 FileUpload를 사용하여 이미지 업로드를 달성하는 가장 기본적인 구현에 대한 주요 소개입니다.
1. 프론트 엔드에서 파일 태그를 사용하십시오.
<input name = "filename"type = "file"class = "text1"size = "40"maxlength = "40">
2. 파일의 ENCTERPE 형식을 설정하십시오 : 멀티 파트/양식-데이터
<form name = "itemform"target = "_ self"id = "itemform"method = "post"action = "servlet/item/fileUploadServlet"EncType = "multipart/form-data">
ENCTYPE = "Multipart/Form-Data"에 대한 지침 :
이 형식이 JSP에서 사용되는 경우 해당 서블릿은 request.getParameter ()를 사용하여 매개 변수를 얻을 수 없습니다. ServletFileUpload 객체의 parserequest 메소드를 사용하여 요청 객체의 데이터를 먼저 구문 분석 한 다음 구문 분석 된 요소의 ISFormfield 플래그를 사용하여 GetFieldName 메소드와 협력하여 데이터를 얻어야합니다.
3. FileUploadServlet의 구현 :
패키지 com.bjpowernode.drp.basedata.web; import java.io.file; import java.io.ioexception; import java.util.iterator; 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.disk.diskfileitemfactory; import org.apache.commons.fileupload.servlet.servletfileupload; import com.bjpowernode.drp.baseddata.manager.itemmanager; import com.bjpowernode.drp.baseddata.manager.itemmanagerimpl; import com.bjpowernode.drp.util.applicationException; public class fileUploadServlet 확장 actractItemServlet {private file uploadpath; 개인 파일 온도; @override public void init ()는 servletexception {// 시스템이 시작되면 초기화를 시작합니다. 초기화 중에 사진이 업로드 된 폴더와 임시 파일이 저장된 폴더가 존재하는지 확인하십시오. 존재하지 않는 경우 // 루트 디렉토리 업로드에 해당하는 실제 물리적 경로를 만듭니다. 업로드 경로 = 새 파일 (getServletContext (). getRealPath ( "Upload")); System.out.println ( "uploadpath ====" + uploadpath); // 디렉토리가 존재하지 않는 경우 (! uploadPath.exists ()) {// 디렉토리를 만들고 업로드 PATH.mkdir (); } // temporary directory // file tempfile = new File (item.getName ()) 임시 객체 temppath를 구성 = 새 파일 (getServletContext (). getRealPath ( "temp")); if (! temppath.exists ()) {temppath.mkdir (); } // 상위 클래스 메소드가 표시되지 않으면 ItemManager 인스턴스가 없으므로 NULL POINTER SUPER.INIT (); } public void doget (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {dopost (요청, 응답); } public void dopost (httpservletrequest request, httpservletrequest response)는 servletexception, ioexception {// item_upload.jsp에서 데이터 가져옵니다. 업로드 된 페이지의 인코딩 형식은 일반적인 페이지와 다르기 때문에, multiptart/form-data "를 사용하여 데이터를 사용하지 않기 때문에 {// item_upload.jsp에서 데이터 가져옵니다. req.getParameter () // string itemno = req.getParameter ( "itemNo"); //system.out.println("itemno======= " + itemNo); /*********************************************Use the FileUpload component to parse the form*************************/ //DiskFileItemFactory: Create a factory for FileItem object. 이 공장 클래스에서는 메모리 버퍼 크기와 임시 파일이 저장된 디렉토리를 구성 할 수 있습니다. DiskFileItemFactory Factory = 새로운 DiskFileItemFactory (); // 메모리 팩토리에 저장 될 최대 크기 .SetSizetHreshold (4096); // getSizetHreshold () factory.setRepository (temppath)보다 큰 데이터를 저장하는 위치; // ServletFileUpload : 업로드 된 파일 데이터를 처리하고 데이터의 각 부분을 파일 시티 객체로 캡슐화하는 책임이 있습니다. // 업로드 된 파일 데이터를 수신하면 콘텐츠가 메모리 캐시에 저장됩니다. 파일 내용이 DiskFileItemFactory로 지정된 버퍼의 크기를 초과하면 // 파일은 디스크에 저장되고 DiskFileItemFactory의 지정된 디렉토리에서 임시 파일로 저장됩니다. // 파일 데이터가 수신 된 후 ServleTupload는 파일에서 파일에서 데이터를 업로드 된 파일 디렉토리의 파일에 씁니다. // fileUploadexception 전 최대 크기가 업로드됩니다. / ******************* 양식에 따라 전달 된 데이터를 구문 분석하고 목록 수집 데이터 유형을 반환합니다 : FileItem ***************/ try {list fileItems = ubload.parsEerquest (요청); 문자열 itemNo = ""; // iterator iter = fileItems.iterator () iterator //iter.hasnext () 순서에 요소가 있는지 확인하십시오 (iterator iter = fileItems.iterator (); iter.hasnext ();) {// 시퀀스 파일 항목 = (fileItem) iter.next ()에서 다음 요소를 가져옵니다. // 파일 또는 텍스트 정보 여부를 판단하십시오 // If (item.isformfield ()) {if ( "itemno".Equals (item.getFieldName ())) {itemNo = item.getString (); }} // if (! item.isformfield ()) {// 업로드 된 파일의 이름과 전체 경로 filename = item.getName (); 긴 크기 = item.getSize (); // 파일이 선택되었는지 여부를 결정합니다 ((filename == null || filename.equals ( "")) && size == 0) {계속; } // 다음과 같은 문자열을 가로 채 웁니다. // 서버의 실제 디스크에 파일을 저장하십시오. 첫 번째 매개 변수는 전체 경로 (파일 이름 제외)입니다. 두 번째 매개 변수는 : 파일 이름 //item.write(file); // 파일 이름을 수정하고 자료 이름이 동일하며 파일 확장자는 gif //item.write (new file (uploadpath, itemno + ".gif")이어야합니다. // 파일 이름을 수정하지 않고 파일을 디렉토리에 저장합니다. // 이미지 파일 이름을 데이터베이스 itemManager.uploadItemImage (itemNo, filename)에 작성합니다. }} response.sendRedirect (request.getContextPath () + "/servlet/item/searchItemServlet"); } catch (예외 e) {e.printstacktrace (); 새로운 ApplicationException을 던지십시오 ( "업로드 실패!"); }}} 이 클래스는 AbstractItemservlet을 상속합니다 : 모든 재료 서블릿의 추상적 부모 클래스
/** * 모든 재료 서블릿의 추상적 인 부모 클래스는 ItemManager를 인스턴스화 할 책임이 있습니다 * @Author limin * */public acc @override public void init ()가 servletexception {itemmanager = new itemmanagerImpl ()}}ItemManagerImpl은 ItemManager 인터페이스를 구현하는 서브 클래스입니다. 이 설계 모델에는 급여 최적화가있는 한 가지 문제가 있지만 여기서는 사진의 업로드를 설명하기 위해 관련이없는 언급을하지 않을 것입니다.
요약 :
init () 초기화 방법에 대해 :
서블릿이 초기화되면 디렉토리가 동적으로 생성됩니다. 다음은 Tomcat의 WebApps의 프로젝트 및 디렉토리에 대한 업로드 및 임시 파일 온도입니다.
Super.init () 메소드를 여기에서 호출해야한다는 점은 주목할 가치가 있습니다 (Super는 부모 클래스 객체에 대한 참조가 아니라 부모 클래스 메소드에 대한 호출을 담당합니다). 그렇지 않으면 클래스에 대한 널 포인터가 발생할 수 있습니다.
업로드는 대략 세 단계로 수행됩니다. FileUpload 구성 요소를 사용하여 양식을 구문 분석하십시오. 양식으로 전달 된 데이터를 구문 분석하고 목록 수집 데이터 유형을 반환합니다 : FileItem; 마지막으로 이미지를 업로드하십시오.
FileItem의 isformfield () 메소드를 사용하여 일반 텍스트인지 파일인지 확인하십시오.
파일을 업로드하려면 fileitem.write (새 파일 (uploadpath, filename))을 사용하십시오. 첫 번째 매개 변수는 전체 경로 (파일 이름 제외)입니다. 두 번째 매개 변수는 : 파일 이름;
일반 텍스트 데이터 처리 :
if ( "itemNo".Equals (item.getFieldName ())) {itemNo = item.getString (); }업로딩은 수년 동안 비교적 성숙한 기술이며, 매일 프로젝트에서 직접 사용할 수있는 많은 포장 된 기술이 있지만 몇 가지 기본 원칙을 이해하는 것이 필수적입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.