이 기사는 모든 사람이 Java 파일 업로드 기능을 더 잘 배우도록 돕기 위해 두 가지 파일 업로드 예제를 비교합니다. 특정 내용은 다음과 같습니다
1. Java 첨부 파일 업로드 코드
@ControllerPublic Class UploadFile은 BaseJsonController를 확장합니다. {/** * 첨부 파일 업로드 * * @param request * @param creativefile * @param 응답 * @return */@requestmapping (value = "/upload/uploadfile.json") public void uploadfile (httpperquest 요청) {httppervletRequest, htterprongrongrongrongrongronge). 1. 서버의 보안을 보장하기 위해 업로드 된 파일은 Web-Inf 디렉토리와 같이 외부 세계에서 직접 액세스 할 수없는 디렉토리에 배치해야합니다. * 2. 파일 덮어 쓰기를 방지하려면 파일 업로드를 위해 고유 한 파일 이름을 생성해야합니다. * 3. 디렉토리 아래에 너무 많은 파일이 나타나지 않으려면 해시 알고리즘을 사용하여 스토리지를 분해해야합니다. * 4. 업로드 된 파일의 최대 값은 제한되어야합니다. * 5. 업로드 된 파일의 유형을 제한하려면 업로드 된 파일 이름을 수신 할 때 접미사 이름이 합법적인지 확인하십시오. *///업로드 된 파일 저장 디렉토리를 가져오고 업로드 된 파일을 Web-Inf 디렉토리에 저장하고 업로드 된 파일의 보안을 보장 할 수 있도록 외부 세계에서 직접 액세스 할 수 없습니다. string savepath = requestsession (). getervletContext (). getRealPath ( "/web-inf/upload"); // 업로드 중에 생성 된 임시 파일 저장 디렉토리는 temppath = requestSession (). getServletContext (). getRealPath ( "/web-inf/temp"); 파일 tmpfile = 새 파일 (temppath); if (! tmpfile.exists ()) {// 임시 디렉토리 생성 tmpfile.mkdirs (); } // 메시지가 jsonarray arr = new jsonArray (); map <string, 객체>지도 = null; inputStream in = null; fileoutputStream out = null; {// Apache 파일 업로드 구성 요소를 사용하여 파일 업로드 단계를 처리하려면 : // 1. DiskFileItemFactory Factory DiskFileItemFactory Factory = New DiskFileItemFactory ()를 만듭니다. // 공장 버퍼의 크기를 설정합니다. 업로드 된 파일 크기가 버퍼의 크기를 초과하면 지정된 임시 디렉토리에 임시 파일이 생성되고 저장됩니다. Factory.SetSizetHreshold (1024*100); // 버퍼 크기를 100KB로 설정합니다. 지정되지 않은 경우 버퍼 크기는 기본적으로 10KB입니다. // 업로드 공장에서 생성 된 임시 파일의 스토리지 디렉토리를 설정합니다. // 2. 파일 업로드 Parser ServletFileUpload 업로드 = New ServletFileUpload (Factory); // 파일 업로드 업로드 업로드 업로드 .setProgressListener (New ProgressListener () {public void update (long pbytesread, long pcontentlength, int arg2) {system.out.println ( "파일 크기는" + pcontentlength + ", 현재 처리 된 :" + pbytesread);}}; // 중국인의 garbled 업로드를 해결합니다 .SetheAderEncoding ( "UTF-8"); // 3. 제출 된 데이터가 if (! servletfileupload.ismultipartContent (request)) {// 기존 방식에 따라 데이터 반환을 얻습니다. } // 업로드 된 단일 파일의 최대 크기를 설정하고 있으며 현재 1024*1024 바이트, 즉 20MB UPLOAD.SETFILESIZEMAX (1024*1024*20)로 설정됩니다. // 업로드 된 파일의 총 최대 값을 설정합니다. 최대 값 = 동시에 업로드 된 여러 파일의 최대 크기의 합. 현재 40MB 업로드로 설정되어 있습니다 .SetSizEmax (1024*1024*40); // 4. ServletfileUpload 파서를 사용하여 업로드 된 데이터를 구문 분석하십시오. 구문 분석 결과는 <fileitem> 컬렉션 목록을 반환합니다. 각 fileItem은 양식 @SuppressWarnings ( "확인되지 않은") 목록의 입력 항목에 해당합니다. List <fileItem> list = upload.parserequest (request); for (fileitem item : list) {// 일반 입력 항목의 데이터가 파일에 캡슐화 된 경우 (item.isformfield ()) {문자열 이름 = item.getfieldName (); // 일반 입력 항목의 데이터의 중국어가 달린 문제를 해결하십시오. 문자열 값 = item.getString ( "UTF-8"); // value = new String (value.getBytes ( "iso8859-1"), "utf-8"); System.out.println (name + "=" + value); } else {// 파일 항목이 업로드 된 파일에 캡슐화 된 경우 // 업로드 된 파일 이름, String filename = item.getName (); if (filename == null || filename.trim (). equals ( "")) {계속; } // 참고 : 다른 브라우저에서 제출 한 파일 이름은 다릅니다. 일부 브라우저는 다음과 같은 경로와 함께 파일 이름을 제출하는 반면, 일부 브라우저는 다음과 같은 간단한 파일 이름입니다. 1.txt // 처리 된 파일 이름의 파일 이름의 경로 부분은 업로드 된 파일의 경로 부분을 처리합니다. 파일 이름 부분 만 필레나 이름 = filename.substring ( "//"); // 업로드 된 파일의 확장자를 가져옵니다. string fileExtName = filename.substring (filename.lastIndexof ( ".")+1); // 업로드 된 파일 유형을 제한 해야하는 경우 파일 확장자를 사용하여 업로드 된 파일 유형이 합법적인지 확인할 수 있습니다 (stringUtils.equals ( "rar") || StringUtils.equals (fileExtName, "Zip") {새로운 bizexception ( "", "업로드 compressed 파일!"); } /*************** // item = item.getInputStream ()에서 업로드 된 파일의 입력 스트림을 가져옵니다. /****************** // 파일 저장된 파일의 이름 가져옵니다. string savefilename = makefilename (filename); // 파일을 가져 오기 디렉토리 저장 문자열 realSavePath = makePath (SaveFilename, SavePath); // 파일 출력 스트림을 만듭니다. out = new FileOutputStream (realSavePath + "//" + saveFilename); // 버퍼 바이트 버퍼 만들기 [] = 새로운 바이트 [1024]; // 입력 스트림의 데이터가 읽었는지 여부를 식별하는 것은 int len = 0입니다. // 루프는 입력 스트림을 버퍼로 읽습니다. } // 입력 스트림을 닫아 in.close (); // 출력 스트림을 닫아 out.close (); // 파일을 처리 할 때 생성 된 임시 파일을 삭제합니다. 업로드 item.delete (); map = new Hashmap <String, Object> (); map.put ( "savefilename", savefilename); map.put ( "RealSavePath", RealSavePath); arr.add (지도); }} returnSuccessjson ( "uploadbase.filesizelimitexeceedexception e) {e.printstacktrace (); returnfailjson (e.getMessage (),"단일 파일은 최대 값을 초과하십시오 !!! returnfailjson (), 업로드 된 파일의 총 크기는 최대 한계를 초과합니다! en @return uuid + "_" + 파일의 원래 이름 */private string makefilename (string filename) {//2.jpg // 파일 오버 라이팅을 방지하려면 파일을 업로드하려면 고유 한 파일 이름이 생성되어야합니다. } / ** * 디렉토리에 너무 많은 파일이 나타나지 않으려면 해시 알고리즘을 사용하여 스토리지 * @Method : makepath * @description : * @Anthor : XUWENTAO * * @param filename 파일 이름, 파일 이름을 기반으로 스토리지 디렉토리를 생성 * @Param Save PILE PATH * / PRIVATION STOROTITOPITH * / PRIVATION STOROTIOT (string MAKE) // 파일 이름의 해시 코드 값을 가져오고 얻는 것은 Memory int Hashcode = filename.hashcode ()의 String 객체 Filename의 주소입니다. int dir1 = 해시 코드 & 0xf; // 0--15 int dir2 = (Hashcode & 0xf0) >> 4; // 0-15 // 새 저장 디렉토리 구조 디렉토리 문자열 dir = savepath + "//" + dir1 + "//" + dir2; // 업로드/2/3 업로드/3/5 // 파일은 파일과 디렉토리 파일을 모두 나타낼 수 있습니다. 파일 = 새 파일 (dir); // 디렉토리가 존재하지 않는 경우 (! file.exists ()) {// 디렉토리 파일을 만듭니다 .mkdirs (); } return dir; }}2. Java 업로드 이력서 코드
/ ***업로드 이력서*1 파일 생성 실패 2- 예점 3-upload 실패 4 파일 4 파일 획득되지 않음 5 파일 삭제되지 않음 6 파일 삭제되지 않음 6 파일 업로드 워드, 엑셀, ppt, pdf 파일*//*경로 분리기 : 적응 형 운영 체제에서 사용*/ private static final string file_separator = system.system.getproperties ( "file.get.getproperties ("); / ** * 파일 업로드 * * @param fileio * @param oldcontracturl * @param request * @return 반환 파일 주소 (상대 주소, 비 absolute 주소) */ @override public string upload (multipartfile fileio, string oldcontraturl, httpservletrequest request) {string uploadUrl = requests () // if (OldContractUrl! = null) {String OldDirectory = OldContractUrl.SubString (5, OldContractUrl.lastIndexof (file_separator)) if 파일 및 폴더를 삭제합니다. 파일 = 새 파일 (uploadUrl + OldDirectory); 부울 플래그 = deletedir (파일); if (! flag) {logger.error ( "오래된 파일 삭제 실패"); "5"를 반환합니다. }} // 새 이력서 파일 업로드 long = System.CurrentTimeMillis (); uploadUrl = uploadUrl + file_separator + now + file_separator; 문자열 reumeMeame = ""; if (! fileio.isempty ()) {Resumename = StringUtils.deleteWhitespace (fileio.getoriginalFilename ()); // 파일 판사 접미사/*문자열 접미사 = resumename.substring (resumename.lastIndexof ( "), recename.length ()) .tolowercase (); if (! ". doc".equals (접미어) &&! ". docx".equals (wiffix) && ". xlsx".equals ".equals (wiffix) &&". xlsx ".equals (접미사) &&". ppt ".equix (toptix) &&",. pptx ", equals (equals),. logger.error ( "Word, Excel, Ppt, PDF 파일"); "6"반환; }*/} else {logger.error ( "파일을 얻지 못함"); "4"를 반환합니다. } 파일 dir = 새 파일 (uploadUrl); if (! dir.exists ()) {dir.mkdirs (); } 파일 targetFile = 새 파일 (uploadUrl + remename); if (! targetfile.exists ()) {try {targetfile.createnewfile (); } catch (ioexception e) {logger.error ( "파일 생성 실패", e); "1"을 반환합니다. }} try {fileio.transferto (TargetFile); } catch (delegalStateException e) {logger.error ( "Sentence Exception", e); "2"를 반환합니다. } catch (ioexception e) {logger.error ( "업로드 실패", e); "3"를 반환합니다. } return file_separator + "files" + file_separator + now + file_separator + Resumename; } /*** 디렉토리의 모든 파일과 하위 디렉토리의 모든 파일을 재귀 적으로 삭제합니다.* @param di dir 삭제할 파일 디렉토리* @return boolean은 "true"를 반환합니다. * 삭제가 실패하면 메소드는 * 삭제를 시도하고 "false"를 반환합니다. */ public boolean deletedir (file dir) {if (dir.isdirectory ()) {string [] children = dir.list (); // 디렉토리에서 하위 디렉토리를 재귀 적으로 삭제합니다 (int i = 0; i <children.length; i ++) {boolean success = deletedir (새 파일 (dir, children [i])); if (! success) {return false; }}} // 디렉토리는 현재 비어 있으므로 return dir.delete ()를 삭제할 수 있습니다. }위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되고 Java 파일을 업로드하는 기술을 마스터하는 데 도움이되기를 바랍니다.