数日前、私はプロジェクトをしました。クライアントと管理者は一緒に書かれており、同じサーバーを共有しました。クライアントによってアップロードされたファイルはすべてサーバーのハードディスク上にありました。ラオスは長い間、クライアントと管理者側を分離することを提案していましたが、この時点でユーザーがアップロードした添付ファイルのストレージに問題がありました。明らかに、データベースに何百ものMと同じ大きさのAPKファイルを保存することは非現実的です。長い間チェックした後、両端にファイルを送信するFTPサーバーを確立する最速の方法です。
特定のプロセスは、ユーザーが外部ネットワーククライアントにログインし、ファイルを外部ネットワークサーバーハードディスクにアップロードすることです。同時に、ファイルは外部ネットワークサーバーを介してイントラネット管理者サーバーのFTPサーバーにアクセスし、イントラネットサーバーハードディスクに渡します。このようにして、イントラネットサーバーはアップロードされたファイルを暗号化して署名し、ファイルをFTPを介して外部ネットワークサーバーハードディスクに戻し、他の操作を実行することができます。
特定の実装で使用されるツール:serv-u。 Serv-Uは、WindowsでFTPサーバーを確立するのを促進するツールです。ダウンロードしてクラッキングした後、手順に従って、IP、ポート、アカウントパスワード、FTPアクセス、操作許可などを可能にするディスクパスを設定し、使用できます。 IPをテストするときは、127.0.0.1を選択し、イントラネットでIPをテストするときは、192.168.0.xを選択します。
Javaプロジェクトの実装では、自分でツールクラスを作成し、機能をアップロード、ダウンロード、削除したApacheのCommons-Netパッケージを使用しました。添付コード:
パッケージapp.ftp; java.io.fileをインポートします。 java.io.fileinputStreamをインポートします。 java.io.filenotfoundexceptionをインポートします。 java.io.fileoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 java.io.outputStreamをインポートします。 Import org.apache.commons.net.ftp.ftpclient; org.apache.commons.net.ftp.ftpfileをインポートします。 import org.apache.commons.net.ftp.ftpreply; /*** FTPサーバーツールクラス** /public class ftputils { /***ファイルをFTPサーバーにアップロード** @param url* server IPアドレス* @paramポート* @param Username*ユーザーログイン名* @paramパスワード*ユーザーログインパスワード* @Param StorePath* Serverファイルファイル* @Param File File Stream* @Param** @Param* <b> true </b>:正常にアップロード* <br/>* <b> false </b>:failed*/public static boolean storefile(string url、int port、string username、string storepath、string filename、inputstream is){boolean result = false; ftpclient ftp = new ftpclient(); {//サーバーに接続すると、ポートがデフォルトで21になります。ftp.connect(url、port)を直接接続できます。 //サーバーにログインftp.login(username、password); //戻りコードが合法かどうかを決定する場合(!ftpreply.ispositiveCompletion(ftp.getReplyCode())){//違法なftp.disconnect(); disconnect; //プログラムの返された結果を終了します。 } // FTPディレクトリが存在するかどうかを決定します。存在しない場合は、マルチレベルのディレクトリ文字列s = "/"+storePathの作成など、ディレクトリを作成します。 string [] dirs = s.split( "/"); ftp.changeworkingdirectory( "/"); //ディレクトリが順番に存在するかどうかを確認します。存在しない場合は、(int i = 1; dirs!= null && i <dirs.length; i ++){if(!ftp.changeworkingdirectory(dirs [i])){if(ftp.makedirectory(ftp.makedirectory(dirs [i])){if(!ftp.changeworkingdirectory(i])のディレクトリを作成します。 }} else {return false; }}} //ファイル操作ディレクトリftp.changeworkingdirectory(storepath)を設定します。 //ファイルタイプ、バイナリftp.setfiletype(ftpclient.binary_file_type); //バッファサイズftp.setBufferSize(3072)を設定します。 // file result = ftp.storefile(filename、is); //入力ストリームを閉じますis.close(); //サーバーftp.logout(); } catch(ioexception e){e.printstacktrace(); }最後に{try {// if(null!= is){//入力ストリームを閉じるis.close(); } //接続が存在するかどうかを確認してください}} catch(ioexception e){e.printstacktrace(); }} return result; }/** * FTPサーバーからローカルへのファイルをダウンロード * * @param url * server IPアドレス * @paramポート * @param username * user login name * @param password * @param remotepath * @param remotepath * @param remotepath * @param filename * serverファイルストレージ * @paramローカルパス<b> false </ b>:failed*をダウンロード*/ public static boolean retiveFile(string url、int port、string username、string password、string remotepath、string filename、string localpath){boolean result = false; ftpreply.ispositiveCompletion(ftp.getReplyCode())){//ポートが合法でない場合は切断します。 //プログラムの返された結果を終了します。 } //ファイル操作ディレクトリftp.changeworkingdirectory(remotepath)を設定します。 //ファイルタイプ、バイナリFTP.setFileType(ftpclient.binary_file_type); //バッファサイズftp.setBufferize(3072)を設定します。 // ftp.setcontrolencoding( "utf-8")をエンコードする文字を設定します。 // localファイルオブジェクトファイルlocalfile = new file(localpath + "/" + filename)を作成します。 //ファイル操作ディレクトリ文字列ですべてのファイル名を取得します[] Remotenames = ftp.ListNames(); //ファイル名をループして、(String Remotename:Remotenames)for Downloadedのファイル名が含まれているかどうかを判断する{if(filename.equals(remotename)){result = true; }} //ファイル名の比較が成功した場合、[result)if(result){//ファイル出力ストリームos = new fileoutputStream(localfile)を作成するif(result){//ダウンロードプロセスを入力します。 //ファイル結果= ftp.retrievefile(filename、os)をダウンロードします。 //出力ストリームを閉じますos.close(); } //サーバーftp.logout()をログアウトします。 } catch(ioexception e){e.printstacktrace(); }最後に{try {//出力ストリームが存在するかどうかを判断します(null!= os){//出力ストリームos.close(); } //接続が存在するかどうかを決定}} catch(ioexception e){e.printstacktrace(); }} return result; }/*** ftpサーバーからファイルを削除*** @param url* server IPアドレス* @param port* @param username*ユーザーログイン名* @paramパスワード*ユーザーログインパスワード* @param filename* @param filename*サーバーファイルストレージ名* @return* @return* Static Boolean DeleteFile(String URL、Int Port、String Username、String Password、String Remotepath、String Filename){boolean result = false; ftpclient ftp = new ftpclient(); {//サーバーに接続すると、ポートがデフォルトで21になります。ftp.connect(url、port)を直接接続できます。 //サーバーにログインftp.login(username、password); //戻りコードが合法かどうかを決定する場合(!ftpreply.ispositiveCompletion(ftp.getReplyCode())){// regal ftp.disconnect(); //プログラムの返された結果を終了します。 } //ファイル操作ディレクトリftp.changeworkingdirectory(remotepath)を設定します。 //ファイルタイプ、バイナリFTP.setFileType(ftpclient.binary_file_type); //バッファサイズftp.setBufferize(3072)を設定します。 // ftp.setcontrolencoding( "utf-8")をエンコードする文字を設定します。 //ファイル操作ディレクトリ文字列ですべてのファイル名を取得します[] Remotenames = ftp.ListNames(); //ファイル名を比較して、ダウンロードするファイル名が現在(String Remotename:Remotenames){if(filename.equals(remotename)){result = true; }} //ファイル名の比較が成功した場合、削除プロセスを入力してください(result){// delete file result = ftp.deletefile(filename); } //サーバーからログアウトftp.logout(); } catch(ioexception e){e.printstacktrace(); }最後に{try {//接続が存在するかどうかを決定します}} catch(ioexception e){e.printstacktrace(); }} return result; } public static void main(string [] args)throws filenotfoundexception {// try {// fileinputStream fis = new fileinputStream(new File( "D:/Soft Storage/Soft Toolbox/HTML_HELP_WORKSHOP_1.3_XIAZAIBA.ZIP")); // system.out.println(storefile( "192.168.1.2"、21、 "admin"、 "1"、 "c:/documents and settings/administrator/desktop"、randomuuid.random() + ".zip"、fis)); //} catch(filenotfoundexception e){// e.printstacktrace(); //} // // file file = new file( "c:/users/freed/desktop/1.txt"); // inputstream is = new FileInputStream(file); //system.out.println(storefile("127.0.0.1 "、21、" feili "、" feili "、" examples "、" 2.txt "、is)); //system.out.println(tretrievefile("127.0.0.1 "、21、" feili "、" feili "、" Examples/jsp "、" index.html "、" c:/users/freed/desktop "); //system.out.println(deletefile("127.0.0.1 "、21、" feili "、" feili "、" testpath "、" 1.txt ")); }}ファイルをアップロードするときは、最初にファイルファイルをFileInputStreamに配置する必要があることに注意してください。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。