Alguns dias atrás, fiz um projeto. O cliente e o administrador foram escritos juntos e compartilharam o mesmo servidor. Os arquivos enviados pelo cliente estavam todos no disco rígido do servidor. O Lao Long propôs separar o cliente e o lado do administrador e, neste momento, havia um problema com o armazenamento dos anexos enviados pelo usuário. Obviamente, não é realista armazenar arquivos APK tão grandes quanto c centenas de M no banco de dados. Depois de verificar por um longo tempo, é a maneira mais rápida de estabelecer um servidor FTP para transmitir arquivos nas duas extremidades.
O processo específico é que o usuário efetua login no cliente de rede externa e carrega o arquivo no disco rígido do servidor de rede externo. Ao mesmo tempo, o arquivo acessa o servidor FTP do servidor de administrador da intranet através do servidor de rede externo e o passa para o disco rígido do Intranet Server. Dessa forma, o servidor intranet pode criptografar e assinar os arquivos enviados e depois passar os arquivos de volta para o disco rígido do servidor de rede externo através do FTP para os usuários executarem outras operações.
As ferramentas usadas na implementação específica: serv-u. O Serv-U é uma ferramenta que nos facilita para estabelecer um servidor FTP no Windows. Após o download e rachadura, siga as etapas, defina o IP, porta, senha da conta, caminho do disco que permita o acesso ao FTP, as permissões de operação etc. e você pode usá -lo. Ao testar o IP, escolha 127.0.0.1 e, ao testar o IP na intranet, escolha 192.168.0.x.
Na implementação do projeto Java, escrevi uma aula de ferramentas e usei o pacote do Apache do Commons-Net, que fez upload, baixar e excluir funções. Código anexado:
pacote app.ftp; importar java.io.file; importar java.io.fileInputStream; importar java.io.filenotfoundException; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStream; importar java.io.OutputStream; importar org.apache.commons.net.ftp.ftpClient; importar org.apache.commons.net.ftp.ftpfile; importar org.apache.commons.net.ftp.ftpreply; /*** FTP servidor Ferramenta Class** /public class Ftputils { /*** Faça o upload do arquivo para ftp servidor** @param url* Endereço IP do servidor* @param porta* porta servidor* @param nome de usuário* nome do usuário @param name* @param senha* Login do usuário* @param storePath* servidor de arquivo* @param FILENAME <b> true </b>: upload com sucesso* <br/>* <b> false </b>: Falha no upload*/public static boolean storefile (string url, int porta, string nome de usuário, senha de string, string storepath, string filename, inputStream is) {resultado boolean = false; FtpClient ftp = new ftpClient (); tente {// Ao conectar -se ao servidor, a porta padrão para 21, você pode conectar diretamente ftp.connect (url, porta); // Faça login no servidor ftp.login (nome de usuário, senha); // Determine se o código de retorno é legal se (! Ftpreply.ispositiveciction (ftp.getReplyCode ())) {// desconecte quando ilegal ftp.disconnect (); // encerrar o resultado de retorno do programa; } // Determine se o diretório FTP existe. Se não existir, crie um diretório, incluindo a criação de uma sequência de diretório de vários níveis S = "/"+StorePath; String [] dirs = s.split ("/"); ftp.ChangeWorkingDirectory ("/"); // Verifique se o diretório existe em ordem. Se não existir, crie um diretório para (int i = 1; dirs! = Null && i <dirs.length; i ++) {if (! Ftp.changeworkingDirectory (dirs [i])) {if (ftp.Makedirectory (dirs [i]) (if (! }} else {return false; }}} // Definir diretório de operação de arquivo ftp.ChangeWorkingDirectory (StorePath); // Definir tipo de arquivo, binário ftp.setFiletype (ftpclient.binary_file_type); // Definir tamanho do buffer ftp.setBuffersize (3072); // upload de arquivo de arquivo = ftp.storefile (nome do arquivo, IS); // Fechar o fluxo de entrada is.close (); // logout o servidor ftp.logout (); } catch (ioexception e) {e.printStackTrace (); } finalmente {tente {// verifique se (null! = is) {// feche o fluxo de entrada is.close (); } // Verifique se a conexão existe se (ftp.isconnected ()) {// desconecte ftp.disconnect (); }} catch (ioexception e) {e.printStackTrace (); }} Retornar resultado; } /** * Download file from the FTP server to local* * @param url * Server IP address * @param port * Server port * @param userName * User login name * @param password * User login password * @param remotePath * Server file storage path * @param fileName * Server file storage name * @param localPath * Local file storage path * @return * <b>true</b>: Download successfully* <br/> * <b> false </b>: download falhado*/ public estático booleano recuperfile (URL da string, porta int, nome de usuário da string, senha de string, string remotopath, string filename, string localPath) {resultado boolean = false; Ftpreply.ispositiveciction (ftp.getReplyCode ())) {// desconecte quando a porta não é legal; // encerrar o resultado de retorno do programa; } // Defina o diretório de operação de arquivo ftp.ChangeWorkingDirectory (remotepath); // Defina o tipo de arquivo, binário ftp.setFileType (ftpclient.binary_file_type); // Defina o tamanho do buffer ftp.setBuffersize (3072); // defina o caractere que codifica ftp.setControlencoding ("UTF-8"); // Construa o arquivo de arquivo local Arquivo LocalFile = novo arquivo (LocalPath + "/" + FileName); // Obtenha todos os nomes de arquivos no diretório de operação de arquivo string [] remotenames = ftp.listnames (); // looping o nome do arquivo para determinar se ele contém o nome do arquivo a ser baixado (String remoteName: remoteNames) {if (filename.equals (remotename)) {resultado = true; }} // Quando a comparação do nome do arquivo for bem -sucedida, digite o processo de download se (resultado) {// construir o fluxo de arquivo OS = new FileOutputStream (localFile); // Baixe o resultado do arquivo = ftp.retrievefile (nome do arquivo, OS); // Fechar o fluxo de saída OS.Close (); } // Logre o servidor ftp.logout (); } catch (ioexception e) {e.printStackTrace (); } finalmente {tente {// determinar se o fluxo de saída existe se (null! = os) {// feche o fluxo de saída os.close (); } // Determine se a conexão existe se (ftp.isconnected ()) {// desconecte ftp.disconnect (); }} catch (ioexception e) {e.printStackTrace (); }} Retornar resultado; }/*** Exclua o arquivo do servidor FTP** @param url* endereço IP do servidor* @param porta* @param nome de usuário* Nome do login do usuário* @param senha* Login do usuário senha* @param remotepath* servidor de armazenamento de arquivo* @param arquivo filename* servidor Arquivo Nome* @return* <b> </b> deliclio estático booleano Deletefile (URL da String, INT porta, Nome de usuário da String, String Senha, String Remotepath, String FileName) {BOOLEAN resultado = false; FtpClient ftp = new ftpClient (); tente {// Ao conectar -se ao servidor, a porta padrão para 21, você pode conectar diretamente ftp.connect (url, porta); // Faça login no servidor ftp.login (nome de usuário, senha); // Determine se o código de retorno é legal se (! FtPreply.ispositiveciction (ftp.getReplyCode ())) {// desconecte quando não for legal ftp.disconnect (); // encerrar o resultado de retorno do programa; } // Defina o diretório de operação de arquivo ftp.ChangeWorkingDirectory (remotepath); // Defina o tipo de arquivo, binário ftp.setFileType (ftpclient.binary_file_type); // Defina o tamanho do buffer ftp.setBuffersize (3072); // defina o caractere que codifica ftp.setControlencoding ("UTF-8"); // Obtenha todos os nomes de arquivos no diretório de operação de arquivo string [] remotenames = ftp.listnames (); // loop para comparar os nomes dos arquivos para determinar se o nome do arquivo a ser baixado está atualmente contido para (String remoteName: remotenames) {if (filename.equals (remotename)) {resultado = true; }} // Quando a comparação do nome do arquivo for bem -sucedida, digite o processo de exclusão se (resultado) {// exclua o resultado do arquivo = ftp.deletefile (nome do arquivo); } // logout do servidor ftp.logout (); } catch (ioexception e) {e.printStackTrace (); } finalmente {tente {// determinar se a conexão existe if (ftp.isconnected ()) {// desconecte ftp.disconnect (); }} catch (ioexception e) {e.printStackTrace (); }} Retornar resultado; } public static void main (string [] args) lança 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/administrador/desktop", randomuid.random () + ".zip", fis)); //} catch (filenotfoundException e) {// e.printStackTrace (); //} // // arquivo de arquivo = novo arquivo ("c: /users/freed/desktop/1.txt"); // inputStream is = new FileInputStream (arquivo); //System.out.println(storefile("127.0.0.1 ", 21," feili "," feili "," exemplos "," 2.txt ", é)); //System.out.println(retrievefile("127.0.0.1 ", 21," feili "," feili "," exemplos/jsp "," index.html "," c:/users/freed/desktop ")); //System.out.println(DeleteFile("127.0.0.1 ", 21," feili "," feili "," testpath "," 1.txt ")); }}Deve -se notar que, ao fazer o upload de arquivos, você deve primeiro colocar o arquivo no arquivo no FileInputStream.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.