서버에 파일을 업로드 해야하는 경우 로컬 파일을 리소스 서버에 업로드하는 것입니다. 더 좋은 방법은 FTP를 통해 업로드하는 것입니다. 이것은 SpringMVC+FTP와 함께 업로드됩니다. 먼저 SpringMVC를 구성한 다음 FTP를 구성하는 방법을 이해하고 MultipartFile과 함께 파일을 업로드해야합니다.
SpringMVC 업로드에는 몇 가지 주요 JAR 패키지가 필요합니다. 스프링 및 관련 패키지는 직접 구성 할 수 있습니다. 여기서 우리는 주로 주요 JAR 패키지를 설명합니다
1 : Spring-web-3.2.9. Release.jar (스프링의 주요 JAR 패키지, 직접 버전을 선택할 수 있음)
2 : Commons-IO-2.2.jar (프로젝트에서 IO를 처리하는 데 사용되는 일부 도구 패키지)
구성 파일
SpringMVC는 MultipartFile을 사용하여 파일을 업로드하므로 양식의 파일을 처리하도록 Multipartresolver를 구성해야합니다.
<!-파일 통역사-> <bean id = "multipartresolver"> <property name = "defaultencoding"value = "UTF-8" /> <속성 이름 = "maxUploadsize"value = "10485760" /> <속성 이름 = "maxinMemorySize" "4096" /> <속성 이름 <value ""resolvelazy "
속성에 대해 자세히 설명합니다.
DefaultEncoding 요청의 인코딩 형식을 구성합니다. 기본 ISO-8859-1
MaxUploadSize 구성 파일의 최대 단위, 바이트
MaxinMemorySize는 업로드 된 파일의 캐시를 바이트로 구성합니다
resolvelazily 속성은 파일 해상도를 지연시켜 파일 크기 예외를 업로드 할 수 있도록 할 수 있습니다.
페이지 구성
encType = "multipart/form-data"를 페이지 형태로 추가하십시오
<form id = ""name = ""method = "post"action = ""encticpe = "multipart/form-data">
익명 업로드 된 파일의 올바른 인코딩을 보장하기 위해 양식 태그에 ENCTYPE = "multipart/form-data"를 설정하십시오.
양식의 마임 인코딩입니다. 기본적 으로이 인코딩 형식은 Application/X-www-form-urlencoded이며 파일 업로드에는 사용할 수 없습니다. Multipart/Form-Data를 사용 하여만 파일 데이터를 완전히 전달하고 다음 작업을 수행 할 수 있습니다. ENCTYPE = "multipart/form-data"는 이진 데이터를 업로드하는 것입니다. 양식의 입력 값은 2 자리 방식으로 전달되므로 요청은 값을 얻을 수 없습니다.
업로드 제어 클래스를 작성하십시오
업로드 방법을 작성하면 여기에 결과가 반환되지 않습니다. 페이지로 점프하거나 다른 값을 반환 해야하는 경우 void를 String, Map <String, Object> 및 기타 값으로 변경 한 다음 반환하여 결과를 반환 할 수 있습니다.
/** * upload * @param request * @return */@responsebody @requestmapping (value = "/upload", method = {requestMethod.get, requestMethod.post}) public void upload (httpservletrequest request) {multiptarthtppservletrequest multiptrequest =); multipartFile 파일 = multipartRequest.getFile ( "file"); // 파일은 페이지의 이름입니다. 입력 문자열 basepath = "file path"try {multipartresolver resolver = new Commonsmultipartresolver (request.getSession (). getServletContext ()); if (resolver.ismultipart (request)) {String filestoredPath = "폴더 경로"; // 무작위 생성 파일 이름 문자열 randomname = stringUtil.getRandomFilename (); 문자열 uploadFilename = file.getoriginalFilename (); if (stringUtils.isnotblank (uploadfilename)) {// 파일 형식 이름 string expix = uploadfilename.substring (uploadfilename.indexof ( ".")); // 파일 이름 문자열 newFilename = randomname + 접미사를 다시 조립합니다. String SavePath = BasePath + "/" + NewFilename; 파일 savefile = 새 파일 (savepath); 파일 parentfile = savefile.getParentFile (); if (savefile.exists ()) {savefile.delete (); } else {if (! parentfile.exists ()) {parentfile.mkdirs (); }} // 파일을 지정된 경로에 복사 fileUtils.copyInputStreamTofile (file.getInputStream (), savefile); // 파일을 서버에 업로드 ftpclientUtil.upload (savefile, filestoredpath); }}} catch (예외 e) {e.printstacktrace (); }} FTP 클라이언트 업로드 도구
패키지 com.yuananding.common.util; import java.io.file; import java.io.fileInputStream; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputstream; import java.io.outputStream; import java.net.socketexception; java.util.hashmap import; java.util.map import; java.util.properties import; import org.apache.commons.lang.stringutils; import org.apache.commons.net.ftp.ftp; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpreply; import org.slf4j.logger; org.slf4j.loggerfactory; / *** ftp 클라이언트 도구*/ public class ftpclientUtil {/ *** log*/ private static final logger = loggerfactory.getLogger (ftpclientUtil.class); / ** * FTP 서버 구성-IP 키, 값은 문자열 유형 */ public static final String server_ip = "server_ip"; / ** * FTP 서버 구성-포트 키, 값은 정수 유형 */ public static final String server_port = "server_port"; / ** * FTP 서버 구성-안명 로그인 키, 값은 부울 유형 */ public static final string IS_ANYMONOMOUS = "is_Anonymous"; / ** * 익명 로그인의 사용자 이름 */ public static final String Anonymous_user_name = "익명"; / ** * 익명 로그인의 비밀번호 */ public static final String Anonymous_password = ""; / ** * FTP 서버 구성-로그 사용자 이름의 값은 문자열 유형 */ public static final String user_name = "user_name"; / ** * FTP 서버 구성-비밀번호의 로그, 값은 문자열 유형 */ public static final String password = "password"; / ** * FTP 서버 구성-pasv 키, 값은 부울 유형 */ public static final String IS_PASV = "IS_PASV"; /** * FTP 서버 구성-작업 디렉토리 키, 값은 로그인하는 동안 문자열 유형입니다. 현재 디렉토리 *는 사용자의 홈 디렉토리이며 WorkingDirectory는이를 기반으로 설정해야합니다. 게다가 WorkingDirectory가 존재해야하며 자동으로 생성 할 수 없습니다. 존재하지 않으면 파일이 사용자의 홈 디렉토리에 업로드됩니다. 할당되지 않은 경우 "/"가 사용됩니다. */ public static final string working_directory = "working_directory"; public static map <string, object> servercfg = new Hashmap <String, Object> (); 정적 특성 소품; static {logger.info ( "ftp.properties 파일로드 시작!"); prop = 새로운 속성 (); try {inputStream fps = ftpclientUtil.class.getResourceasStream ( "/ftp.properties"); prop.load (fps); fps.close (); } catch (예외 e) {logger.error ( "예외는 ftp.properties 파일을 읽습니다!", e); } servercfg.put (ftpclientutil.server_ip, 값 ( "server_ip")); servercfg.put (ftpclientutil.server_port, integer.parseint (values ( "server_port"))); servercfg.put (ftpclientutil.user_name, 값 ( "user_name")); servercfg.put (ftpclientutil.password, 값 ( "password")); logger.info (string.valueof (servercfg)); } /*** 파일을 FTP 서버에 업로드합니다. * * * @param servercfg : ftp server configuration * @param filepathtoupload : 업로드하는 파일의 경로 * @param filestoredname : 원격 저장 파일을 제공하는 이름, null, ""및 기타 빈 단어는 * @throws ioexception */ public void void upg <strow <strow <strow <strow <strows */ public strows로 대체됩니다. FilePathTouPload, String filestoredName)는 pocketexception, ioException {upload (servercfg, 새 파일 (filepathtoupload), filestoredName); } /*** 파일을 FTP 서버에 업로드합니다. * * * @param servercfg : ftp server configuration * @param filetoupload : upload * @param filestoredname : 원격 저장된 파일, null, "및 기타 빈 단어를 제공하는 이름은 * @throws ioexception */ public strows final void upload (void ubload)로 대체됩니다. FileTouPload, String filestoredName)은 pocketexception, ioException {if (! filetoupload.exists ()) {throw new new oforgumentException ( "업로드 할 파일이 존재하지 않는다 :" + filetoupload.getAbsolutePath ()); } if (! filetoupload.isfile ()) {wrach new neveralargumentException ( "업로드 할 파일은 파일이 아닙니다 :" + filetoupload.getabsolutepath ()); } if (stringUtils.isBlank ((String) servercfg.get (server_ip)))) {새 불법 불법 행위 렉싱 ( "server_ip는 ftp server 구성에 포함되어야합니다."); } TransferFile (true, servercfg, filetoupload, filestoredName, null, null); } / ** * ftp server에서 파일 다운로드 * * @param servercfg : ftp server configuration * @param filenametodownload : 다운로드 할 파일 이름 * @param filestoredpath : 로컬에서 다운로드 된 파일의 저장된 경로 * @Throws setrows ioexception * / public final void 다운로드 (map <string, string, string, string, string, string). FilestoredPath)는 pocketexception, ioexception {if (stringUtils.isblank (filenametodownload)) {throw new new IrongalArgumentException ( "다운로드 할 파일 이름이 비어있을 수 없음"); } if (stringUtils.isblank (filestoredPath)) {Throw New ImperalArgumentException ( "로컬에서 다운로드 된 파일의 저장된 경로는 비워지지 않을 수 있습니다."); } if (stringUtils.isBlank ((String) servercfg.get (server_ip)))) {새 불법 불법 행위 렉싱 ( "server_ip는 ftp server 구성에 포함되어야합니다."); } TransferFile (False, ServerCfg, NULL, NULL, FILENAMETODOWNLOAD, FILESTOREDPATH); } private static final void transferfile (boolean isupload, map <string, object> servercfg, file filetoupload, String serverFilestoredName, String filenametodownload, String localFilestoredPath), ioException {string host = (string) servercfg.get (server_ip); 정수 포트 = (정수) servercfg.get (server_port); 부울 isanonymous = (부울) servercfg.get (is_anonymous); 문자열 username = (string) servercfg.get (user_name); 문자열 비밀번호 = (문자열) servercfg.get (비밀번호); 부울 ispasv = (부울) servercfg.get (is_pasv); String workingDirectory = (String) servercfg.get (working_directory); ftpclient ftpclient = 새로운 ftpclient (); inputStream fileIn = null; outputStream fileout = null; try {if (port == null) {logger.debug ( "" + host + "에서 ftp 서버에 연결 :" + ftp.default_port); ftpclient.connect (호스트); } else {logger.debug ( "" + host + "의 FTP 서버에 연결 :" + 포트); ftpclient.connect (호스트, 포트); } int reply = ftpclient.getReplyCode (); if (! ftpreply.ispositivecompletion (reply)) {logger.error ( "FTP 서버 연결을 거부"); 반품; } if (isanonymous! = null && isanonymous) {username = anonymous_user_name; 비밀번호 = anonymous_password; } logger.debug ( "username =" + username + "가있는 ftp 서버로 로그인, password =" + password); if (! ftpclient.login (username, password))) {logger.error ( "username =" + username + ", password =" + password)로 ftp 서버를 로그인하지 않음; ftpclient.logout (); 반품; } // 여기서 바이너리 모드를 전송 파일 유형으로 사용합니다. // ASCII 모드는 지원되지 않습니다. logger.debug ( "파일의 세트 유형은 바이너리에 업로드해야합니다."); ftpclient.setfiletype (ftp.binary_file_type); if (ispasv! = null && ispasv) {logger.debug ( "파일을 전송하려면 PASV 모드를 사용하십시오"); ftpclient.enterlocalPassiveMode (); } else {logger.debug ( "활성 모드를 사용하여 파일 전송"); ftpclient.enterlocalactiveMode (); } if (stringUtils.isBlank (WorkingDirectory)) {WorkingDirectory = "/"; } logger.debug ( "현재 작업 디렉토리 변경" + WorkingDirectory로 변경); ChangeWorkingDirectory (ftpclient, WorkingDirectory); if (isupload) {// upload if (stringUtils.isBlank (serverFilestoredName)) {serverFilestoredName = fileToupPload.getName (); } fileIn = 새 fileInputStream (filetouPload); logger.debug ( "업로드 파일 :" + filetoupload.getabsolutepath () + "이름이있는 FTP 서버 :" + serverFilestoredName); if (! ftpclient.storeFile (serverFilestoredName, FileIn)) {logger.error ( "파일을 업로드하지 않으면" + ftpclient.getReplyString ()); } else {logger.debug ( "파일을 업로드하기위한 성공"); }} else {// download // 파일 디렉토리가 파일 filestored = new 파일 (localFilestoredPath)이 있는지 확인하십시오. if (! filestored.getParentFile (). } fileout = 새 FileOutputStream (filestored); logger.debug ( "다운로드 파일 :" + filenametodownload + "FTP 서버에서 로컬로 :" + localFilestoredPath); if (! ftpclient.retrievefile (filenametodownload, fileout)) {logger.error ( "파일을 다운로드 실패" + ftpclient.getReplystring ()); } else {logger.debug ( "파일을 다운로드하기위한 성공"); }} ftpclient.noop (); ftpclient.logout (); } 마지막으로 {if (ftpclient.isconnected ()) {try {ftpclient.disconnect (); } catch (ioexception f) {}} if (filein! = null) {try {filein.close (); } catch (ioexception e) {}} if (fileout! = null) {try {fileout.close (); } catch (ioexception e) {}}} 개인 정적 최종 최종 부울 changeworkingdirectory (ftpclient ftpclient, string workingdirectory)는 ioexception {if (! ftpclient.changeworkingdirectory (WorkingDirectory)) {string [] paths = WorkingDirectory.split ( "/"); for (int i = 0; i <paths.length; i ++) {if (! "". ftpclient.changeworkingdirectory (경로 [i]); }}} return true; } public static final void upload (map <string, object> servercfg, String filepathtoupload, String filestoredPath, String filestoredName)는 pocketexception, ioexception (servercfg, new File (FilePathToupPload), filestoredPath, FileWordedName); } public static final void upload (map <string, object> servercfg, file filetoupload, String filestoredPath, String filestoredName)는 socketException, ioException {if (filestoredPath! = null &&! " } upload (ServerCfg, FileTouPload, filestoredName); } public static final void upload (String filepathtoupload, string filestoredpath)는 pocketexception, ioexception {upload (servercfg, filepathtoupload, filestoredpath ""); } public static final void upload (파일 filetoupload, string filestoredpath) pocketexception, ioexception {upload (servercfg, filetoupload, filestoredpath ""); } 공개 정적 문자열 값 (문자열 키) {문자열 값 = prop.getProperty (키); if (value! = null) {return value; } else {return null; }}} ftp. properties
#server address server_ip = 192.168.1.1 #server port server_port = 21 #Account name user_name = userftp #password #password = passwordftp
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.