サーバー全体にファイルをアップロードする必要がある場合は、ローカルファイルをリソースサーバーにアップロードしています。より良い方法は、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を使用してファイルをアップロードするため、Formのファイルを処理するようにMultiPartresolverを構成する必要があります
<! - ファイルインタープリターをアップロード - > <bean id = "multipartresolver"> <プロパティ名= "defaultEncoding" value = "utf-8" /> <プロパティ名= "maxuploadsize" value = "10485760" /> <プロパティ名= "
属性については詳細に説明されています。
defaultEncoding要求のエンコード形式、デフォルトISO-8859-1を構成する
バイト単位のMaxuploAdsize構成ファイルの最大単位
MaxinMemorySizeアップロードされたファイルのキャッシュをバイトで構成します
Resoclevelazilyプロパティは、ファイルの解像度を遅らせることができるようになり、ファイルサイズの例外がアップロードに巻き込まれます
ページ構成
enctype = "multipart/form-data"をページの形式に追加します
<form id = "" name = "" method = "post" action = "" enctype = "multipart/form-data">
anonymousアップロードされたファイルの正しいエンコードを確保するために、enctype = "multipart/form-data"をフォームタグに設定します。
フォームのマイムエンコーディングです。デフォルトでは、このエンコード形式はApplication/X-WWW-Form-Urlencodedですが、ファイルアップロードには使用できません。 MultiPart/Form-Dataを使用することにより、ファイルデータを完全に渡すことができ、次の操作が実行されます。 enctype = "multipart/form-data"はバイナリデータをアップロードします。フォームの入力値は2桁の方法で渡されるため、リクエストは値を取得できません。
アップロード制御クラスを書き込みます
アップロード方法を書くと、ここには結果が返されません。ページにジャンプする必要がある場合、または他の値を返す必要がある場合は、voidを文字列に変更し、map <string、object>などの値に変更してから、結果を返すために戻ることができます。
/** upload * @param request * @return */@responsebody @requestmapping(value = "/upload"、method = {requestmethod.get、requestmethod.post})public void upload(httpservletrequest request){multiparthttpservletrequest =(multiparthttpsertrequest) MultiPartFile file = Multipartrequest.getFile( "file"); //ファイルはページ入力文字列basepath = "file path" try {multipartresolver Resolver = new commonsmultipartresolver(request.getSession()。getServletContext()); if(resolver.ismultipart(request)){string filestoredPath = "フォルダーパス"; //ランダム生成されたファイル名文字列randomName = stringutil.getRandomFileName(); string uploadfileName = file.getoriginalFileName(); if(stringutils.isnotblank(uploadFileName)){//ファイル形式の名前を挿入しますstring suffix = uploadfilename.substring(uploadfilename.indexof( "。")); //ファイル名文字列newFileName = randomName + suffixを再組み立てします。文字列savepath = basepath + "/" + newFileName;ファイルSaveFile = new File(SavePath); file 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; java.io.fileをインポートします。 java.io.fileinputStreamをインポートします。 java.io.fileoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 java.io.outputStreamをインポートします。 java.net.socketexceptionをインポートします。 java.util.hashmapをインポートします。 java.util.mapをインポートします。 java.util.propertiesをインポートします。 org.apache.commons.lang.stringutilsをインポートします。 org.apache.commons.net.ftp.ftpをインポートします。 Import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpreply; org.slf4j.loggerをインポートします。 org.slf4j.loggeractoryをインポートします。 / *** ftpクライアントツール*/ public class ftpclientutil {/ *** log*/ private static final logger logger = loggerfactory.getLogger(ftpclientutil.class); / ** * ftp server Configuration-ipキー、値は文字列のタイプです */ public static final string server_ip = "server_ip"; / ** * ftp server Configuration--ポートキー、値は整数のタイプです */ public static final string server_port = "server_port"; / ** * ftpサーバー構成 - アノニマスログインキー、値はブールのタイプです */ public static final string is_anonymous = "is_anonymous"; / ** *匿名ログのユーザー名 */ public static final string anonymous_user_name = "anonymous"; / ** *匿名ログのパスワード/ ** * 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 = new Properties(); try {inputstream fps = ftpclientutil.class.getResourceasStream( "/ftp.properties"); prop.load(fps); fps.close(); } catch(Exception e){logger.error( "例外はftp.properties file!"、e); } servercfg.put(ftpclientutil.server_ip、values( "server_ip")); servercfg.put(ftpclientutil.server_port、integer.parseint(values( "server_port"))); servercfg.put(ftpclientutil.user_name、values( "user_name")); servercfg.put(ftpclientutil.password、values( "password")); logger.info(string.valueof(servercfg)); } /***ファイルをFTPサーバーにアップロードします。 * * @param servercfg:ftp server Configuration * @param filepathtoupload:ファイルのパスをアップロードする * @param fileStoredName:リモート保存されたファイル、null、 ""およびその他の空白の単語はファイル名に置き換えられます。 filepathtoupload、string fileStoredName)throse socketException、ioexception {upload(servercfg、new file(filepathtoupload)、fileStoredName); } /***ファイルをFTPサーバーにアップロードします。 * * @param servercfg:ftp server Configuration * @param filetoupload:file file furload * @param filestoredName:リモートストアドファイル、null、 ""およびその他の空白の単語はファイル名に置き換えられます * @throws ioexception * @throws socketad * string fileStoredName)throws socketException、ioException {if(!filetoupload.exists()){throw new IllegalargumentException( "アップロードするファイルは存在しません:" + filetoupload.getabsolutepath(); } if(!filetoupload.isfile()){show new IllegalargumentException( "ファイルアップロードするファイルはファイルではありません:" + filetoupload.getabsolutepath()); } if(stringutils.isblank(((string)servercfg.get(server_ip))){show new IllegalArgumentException( "server_ipをFTPサーバー構成に含める必要があります。"); } TransferFile(true、servercfg、filetoupload、fileStoredName、null、null); } / ** * ftp serverからファイルをダウンロード * * @param servercfg:ftp server Configuration * @param filenametodownload:file name downloaded * @param filestoredpath:@throws socketexception * @throws ioexception * / throws static final void download(string> server object> server downlow> server fileStoredPath)STORS SOCKENTEXCEPTION、IOEXCEPTION {if(Stringutils.isblank(filenametodownload)){新しいIllegalargumentException( "ダウンロードするファイル名は空白になりません。"); } if(stringutils.isblank(filestoredPath)){新しいIllegalArgumentException( "ローカルにダウンロードされたファイルの保存されたパスは空白になりません。"); } if(stringutils.isblank(((string)servercfg.get(server_ip))){show new IllegalArgumentException( "server_ipをFTPサーバー構成に含める必要があります。"); } TransferFile(false、servercfg、null、null、filenametodownload、filestoredpath); } private static final void transferfile(boolean isupload、map <string、object> servercfg、file filetoupload、string filenametodownload、string localfilestoredpath)Socketexception、ioexception、ioexception、ioexception {string host =(string host =(string)servercfg.get(server_ip); integer port =(integer)servercfg.get(server_port); boolean isanonymous =(boolean)servercfg.get(is_anonymous); string username =(string)servercfg.get(user_name);文字列パスワード=(string)servercfg.get(password); boolean ispasv =(boolean)servercfg.get(is_pasv); string workingdirectory =(string)servercfg.get(work_directory); ftpclient ftpclient = new ftpclient(); inputstream filein = null; outputStream fileout = null; try {if(port == null){logger.debug( "" + host + "でftpサーバーに接続する:" + ftp.default_port); ftpclient.connect(host); } else {logger.debug( "" + host + "でftpサーバーに接続する:" + port); ftpclient.connect(host、port); } 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 + "、password =" + password)を備えたftpサーバーにログインします); if(!ftpclient.login(username、password))){logger.error( "username =" + username + "、password =" + password)でftp serverでログインしない場合); 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 = fileToupload.getName(); } filein = new FileInputStream(FileToupload); logger.debug( "upload file:" + filetoupload.getabsolutepath() + "to ftp server with name:" + serverFileStoredName); if(!ftpclient.storefile(serverfilestoredname、filein)){logger.error( "frien of file、" + ftpclient.getReplyString()); } else {logger.debug( "ファイルをアップロードするための成功。"); }} else {//ダウンロード//ファイルディレクトリが存在することを確認してくださいfile fileStored = new file(localfilestoredpath); if(!filestored.getParentFile()。exists()){fileStored.getParentFile()。mkdirs(); } fileout = new fileoutputStream(fileStored); logger.debug( "file:" + filenametodownload + "ftp serverからlocal:" + localfilestoredpath); if(!ftpclient.retrievefile(filenametodownload、fileout)){logger.error( "fileをダウンロードしない" + 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){}}} private static final final changeworkingdirectory(ftpclient ftpclient、string workingdirectory)throws {if(!ftpclient.changeworkingdirectory(workingdirectory)){string [] workingdirectory.directory.split( "/"/"/") for(int i = 0; i <paths.length; i ++){if(! ""。equals(paths [i])){if(!ftpclient.changeworkingdirectory(paths [i])){ftpclient.makedirectory(paths [i]); ftpclient.changeworkingdirectory(paths [i]); }}} return true; } public static final void upload(map <string、object> servercfg、string filepathtoupload、string filestoredpath、string filestoredname)throws socketexception、ioexception {upload(servercfg、new file(filepathtoupload)、filestored -path、filestoredname); } public static final void upload(map <string、object> servercfg、file filetoupload、string filetoredpath、string filestoredname)throws socketexception、ioexception {if(filestoredpath!= null &&! ""。 } upload(servercfg、filetoupload、fileStoredName); } public static final void upload(string filepathtoupload、string filestoredpath)shocketException、ioexception {upload(servercfg、filepathtoupload、filestoredpath、 ""); } public static final void upload(file filetoupload、string filestoredpath)throws socketexception、ioexception {upload(servercfg、filetoupload、filestoredpath、 ""); } public static string values(string key){string value = prop.getProperty(key); if(value!= null){return値; } else {return null; }}} ftp.properties
#serverアドレスserver_ip = 192.168.1.1 #server port server_port = 21 #account name user_name = userftp#password#password = passwordftp
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。