Recentemente, aprendi um pequeno projeto em um determinado site. Porque eu tenho aulas durante o dia, escrevi todas elas à noite. Eu completei hoje.
O projeto implementa principalmente um upload de arquivo, carregando arquivos locais para o banco de dados do servidor (local) através do login do cliente.
Primeiro, crie duas tabelas da seguinte maneira:
Uma tabela de informações de arquivo
Criar tabela `fileInfo` (` fname` char (50) não nulo, `finfo` blob não nulo,` fid` int (10) não null auto_increment, chave primária (`fid`)) mecan
Uma tabela de informações do usuário
Criar tabela `user` (` nome de usuário` (25) não nulo, `senha` char (25) não nulo,` useid` int (10) não nulo auto_increment, chave primária (`useid`)) mecan
Classe de usuário
pacote fileUpload; importar java.io.serializable; /** Classe de entidade do usuário*/ classe pública o usuário implementa serializável {private estático final serialversionuid = -7279093338433393181L; private int useId; // número do usuário private string usename; // nome de usuário string privada string usepsd; // senha de usuário public user () {} public user (string usename, string usepsd) {super (); this.UseName = useName; this.Usepsd = usepsd; } usuário público (int useId, string usename, string usepsd) {super (); this.useId = useId; this.UseName = useName; this.Usepsd = usepsd; } public int getUseId () {return useId; } public void setuseId (int useId) {this.useId = useId; } public string getuseName () {return useename; } public void setusename (string usename) {this.UseName = usename; } public string getUsepsd () {return usepsd; } public void setUsepsd (string usepsd) {this.Usepsd = usepsd; }}Classe de serviço de usuários
pacote fileUpload; / *** Login de usuário e classe de operação de registro*/ importar java.sql.connection; importar java.SQL.DriverManager; importar java.SQL.PreparedStatement; importar java.sql.resultset; importar java.sql.sqLexception; classe pública UserService {conexão privada conn = null; Private PreparedStatement Ptmt = NULL; Resultado privado rs = nulo; // Login do usuário public boolean Login (usuário do usuário) {String url = "jdbc: mysql: // localhost: 3306/fileupload"; // conexão com o banco de dados string sql = "selecione * do usuário onde o nome de usuário = e senha ="; tente {Class.ForName ("org.gjt.mm.mysql.driver"). NewInstance (); Conn = DriverManager.getConnection (URL, "Root", "1995520"); ptmt = Conn.Preparestatement (SQL); ptmt.SetString (1, user.getUseName ()); ptmt.SetString (2, user.getUsepsd ()); rs = ptmt.executeQuery (); if (rs.Next ()) {return true; }} catch (Exceção e) {e.printStackTrace (); } finalmente {tente {rs.close (); ptmt.close (); } catch (sqLexception e) {e.printStackTrace (); }} retornar false; } // Registro do usuário Public Boolean Register (usuário do usuário) {System.out.println ("Hello"); String url = "jdbc: mysql: // localhost: 3306/fileupload"; // conexão com o banco de dados String string sql = "inserir no usuário (nome de usuário, senha) valores (?,?)"; tente {Class.ForName ("org.gjt.mm.mysql.driver"). NewInstance (); Conn = DriverManager.getConnection (URL, "Root", "1995520"); ptmt = Conn.Preparestatement (SQL); ptmt.SetString (1, user.getUseName ()); ptmt.SetString (2, user.getUsepsd ()); ptmt.executeUpdate (); } catch (Exceção e) {e.printStackTrace (); retornar falso; } finalmente {tente {//rs.close (); ptmt.close (); } catch (sqLexception e) {e.printStackTrace (); }} retornar true; }}Classe Fileiofo
pacote fileUpload; importar java.io.serializable; /** Classe de entidade do arquivo*/ classe pública FileInfo implementa serializável {private estático final serialversionuid = 2554622626228481455l; private int fid; // Número do arquivo Private String fname; // Nome do arquivo Private byte [] fContent; // File Content public fileInfo () {} public fileInfo (string fname, byte [] fcontent) {super (); this.fname = fname; this.fcontent = fContent; } public fileInfo (int fid, string fname, byte [] fcontent) {super (); this.fid = fid; this.fname = fname; this.fcontent = fContent; } public int getfid () {return fid; } public void setfid (int fid) {this.fid = fid; } public string getfName () {return fname; } public void setFName (string fname) {this.fname = fname; } public byte [] getFContent () {return fContent; } public void setFContent (byte [] fcontent) {this.fcontent = fContent; }}Classe FileVice
pacote fileUpload; / *** Classe de operação de upload de arquivo*/ importar java.sql.connection; importar java.SQL.DriverManager; importar java.SQL.PreparedStatement; importar java.sql.sqLexception; classe pública FileService {conexão privada Conn = null; Private PreparedStatement Ptmt = NULL; // Salve o arquivo no banco de dados public boolean salvar (arquivo fileInfo) {string url = "jdbc: mysql: // localhost: 3306/fileUpload"; // conexão com o banco de dados String string sql = "inserir no arquivo (fname, finfo) value (?,?)"); tente {Class.ForName ("org.gjt.mm.mysql.driver"). NewInstance (); Conn = DriverManager.getConnection (URL, "Root", "1995520"); ptmt = Conn.Preparestatement (SQL); ptmt.SetString (1, file.getfname ()); ptmt.setBytes (2, file.getfContent ()); ptmt.executeUpdate (); } catch (Exceção e) {e.printStackTrace (); retornar falso; } finalmente {tente {ptmt.close (); } catch (sqLexception e) {e.printStackTrace (); }} retornar true; }} pacote fileUpload;
importar java.io.ioException; importar java.net.serversocket; importar java.net.socket; /** Inicie a classe do servidor*/ public class startServer {@suppresswarnings ("Resource") public static void main (string [] args) {tente {// 1. Crie um soquete do servidor, ou seja, serversocket, especifique a porta ligada e ouça este servidorSocketSocketSocket = New ServerSocket (888); Soquete soquete = nulo; System.out.println ("O servidor foi iniciado, esperando o cliente se conectar ..."); // Ouça longamente aguardar a conexão do cliente enquanto (true) {// 2. Ligue para o método aceit () para começar a ouvir, aguardando o soquete de conexão do cliente = serversocket.accept (); // Crie um novo Thread ServerThread ServerThread = new ServerThread (Socket); // Inicie o Thread ServerThread.start (); }} catch (ioexception e) {// Bloco de captura gerado automaticamente do TODO E.PrintStackTrace (); }}}} [java] Exibir as fatias de código de cópia simples, derivadas do meu pacote de fatias de código FileUpload; importar java.io.ioException; / ** * Inicie a classe do cliente */ public class startClient {public static void main (string [] args) lança IoException {SocketClient client = new SocketClient (); client.showMainMenu (); // Mostrar menu principal}}pacote fileUpload;
importar java.io.ioException; importar java.io.ObjectInputStream; importar java.io.ObjectOutputStream; importar java.net.socket; importar javax.swing.JOptionPane; /** Classe multithreading do lado do servidor*/ public class ServerThread estende o thread {soquete estático = nulo; ObjectInputStream estático privado ois = null; // Entrada de objetos fluxo de objeto privado ObjectputStream ooS = null; // fluxo de saída de objeto Principal Userservice privado US = new Userservice (); // Objeto de negócios do usuário Private FileVice FS = new FileService (); // Arquivo Objeto Business // Initialize SeterThockread Public Docket (Socket Socket) } public void run () {try {ois = new ObjectInputStream (Socket.getInputStream ()); // Receba mensagens enviadas pelo cliente ooS = new ObjecjotOutputStream (Socket.getOuttutStream ()); // usado para enviar mensagens para o comando do cliente transfer = (commandTransfer) ois.Object (); // Leia a operação de comando enviada pelo cliente para o servidor transfer = execute (transferência); // execute a operação de comando enviada pelo cliente para o servidor ooS.WriteObject (transfer); // responda ao cliente} catch (ioexception | classNotFoundException e) {e.printStackTrace (); }}/** Execute a operação de comando enviada pelo cliente para o servidor*/ private CommandTransfer Execute (CommandTransfer transfer) {String cmd = transfer.getcmd (); // obtenha o comando para a operação atual se (cmd.equals ("login")) {// Login do usuário user = (user ).data bandeira booleana = nós.login (usuário); if (sinalizador) joptionpane.showMessagedialog (nulo, "Login com sucesso!"); transfer.setflag (sinalizador); if (flag) {// julga se o login é bem -sucedido transfer.setResult ("Login com sucesso!"); } else {transfer.setResult ("O nome do usuário ou a senha está incorreto, faça o login novamente!"); }} else if (cmd.equals ("register")) {// User User User = (User) transfer.getData (); US.Register (Usuário); // Registrar o usuário boolean sinalizador = US.Register (Usuário); if (sinalizador) joptionpane.showMessagedialog (null, "Registre -se com sucesso!"); transfer.setflag (sinalizador); if (flag) {transfer.setResult ("Registre -se bem -sucedido!"); } else {transfer.setResult ("Registro falhou!"); }} else if (cmd.equals ("uploadfile")) {fileInfo file = (fileInfo) transfer.getData (); fs.Save (arquivo); bandeira booleana = fs.Save (arquivo); if (sinalizador) joptionpane.showMessagedialog (nulo, "enviado com sucesso!"); transfer.setflag (sinalizador); if (flag) {transfer.setResult ("carregado com sucesso!"); } else {transfer.setResult ("Falha no upload!"); }} retornar transferência; }} pacote fileupload; importar java.io.bufferInputStream; importar java.io.fileInputStream; importar java.io.filenotfoundException; importar java.io.ioException; importar java.io.ObjectInputStream; importar java.io.ObjectOutputStream; importar java.net.socket; importar java.net.unknownhostException; importar java.util.scanner; / ** * Classe de menu principal */ classe pública SocketClient {scanner input = new Scanner (System.in); soquete estático privado soquete = nulo; // soquete do cliente // menu principal public void showMainMenu () lança IoException {System.out.println ("****** bem -vindo ao upload de arquivo xx *********"); System.out.println ("1.Login/n2.Register/n3.Login"); System.out.println ("************************************"); System.out.println ("Selecione:"); int escolha = input.NextInt (); // Obtenha soquete de seleção do usuário = new Socket ("localhost", 8888); switch (escolha) {case 1: showLogin (); // efetuar login para quebrar; Caso 2: ShowReGister (); // Break de registro; Caso 3: System.out.println ("Bem -vindo para apoiar este sistema"); System.Exit (0); padrão: System.out.println ("A entrada está incorreta!"); System.Exit (0); }} // Registro do usuário private void showReGister () lança IoException {usuário do usuário = new User (); CommandTransfer transfer = new commandTransfer (); int count = 0; // número de tempo de login while (true) {count ++; if (count> 3) {System.out.println ("Você não conseguiu fazer login em três vezes consecutiva, o programa sai!"); System.Exit (0); } System.out.print ("Por favor, digite o nome do usuário:"); user.setUseName (input.Next ()); System.out.print ("Digite a senha:"); user.setUsepsd (input.Next ()); System.out.print ("Digite a senha novamente:"); String Repassword = input.Next (); if (! user.getUsepsd (). Iguals (Repassword)) {System.out.println ("As senhas inseridas duas vezes são inconsistentes!"); System.out.println ("*********************"); continuar; } transfer.setcmd ("registro"); transfer.setData (usuário); tente {sendData (transfer); // Envie dados para o servidor transfer = getData (); // Retire os dados retornados pelo servidor System.out.println (transfer.getResult ()); // Exibição de saída Sistema de resultado.out.println ("*********************************************************** if (transfer.isflag ()) {break; // Se o registro for bem -sucedido, o registro não será repetido}} catch (desconhecidoHosTexception e) {E.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {}} showLogin (); // login após o registro for bem-sucedido} // obtenha dados do servidor public static commandTransfer getData () lança ioexception {// método com gênero automático TODO Stub ObjectInputStream ois = null; CommandTransfer res = null; tente {if (socket.isclosed ()) soquete = new soket ("localhost", 8888); OIS = new ObjectInputStream (Socket.getInputStream ()); res = (CommandTransfer) OIS.readObject (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); } catch (classNotFoundException e) {// TODO BLOCO DE CATAGEM AUTOMENTADO E.PRINTSTACKTRACE (); } finalmente {if (ois! = null) {tente {ois.close (); //socket.close (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }}} retornar res; } /** FILE OBRIGADO* / private void showupLoadfile () lança ioexception {System.out.println ("Por favor, digite o caminho absoluto para fazer upload do arquivo:"); String Path = input.Next (); Arquivo fileInfo = null; FileInputStream fis = null; BufferInputStream bis = null; String fname = path.substring (path.lastIndexof ("/") + 1); tente {fis = new FileInputStream (caminho); byte [] fContent = novo byte [fis.Available ()]; bis = new bufferinputStream (fis); bis.read (fcontent); arquivo = new FileInfo (fname, fcontent); } catch (filenotfoundException e) {e.printStackTrace (); } finalmente {bis.close (); fis.close (); } CommandTransfer transfer = new commandTransfer (); transfer.setcmd ("uploadfile"); transfer.setData (arquivo); tente {sendData (transfer); // Envie dados para o servidor transfer = getData (); // Retire os dados retornados pelo servidor system.out.println (transfer.getResult ()); // resultado de exibição de saída} catch (uknownHosception e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {}} // Envie dados para o servidor public static void sendData (commandTransfer cmd) lança IoException {// TODO Método Auto-Generado Stub ObjectUtputStream ooS = null; tente {if (socket.isclosed ()) // julgue se o soquete está fechado. Se fechado, abra soquete = novo soquete ("localhost", 8888); OOS = new ObjectOutputStream (Socket.getOutputStream ()); OOS.WriteObject (CMD); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }} // O usuário faz login no private void showLogin () lança ioexception {user user = new user (); CommandTransfer transfer = new commandTransfer (); while (true) {System.out.print ("Por favor, digite o nome do usuário:"); user.setUseName (input.Next ()); System.out.print ("Digite a senha:"); user.setUsepsd (input.Next ()); transfer.setcmd ("login"); transfer.setData (usuário); tente {sendData (transfer); // Envie dados para o servidor transfer = getData (); // Retire os dados retornados pelo servidor System.out.println (transfer.getResult ()); // Exibição de saída Sistema de resultado.out.println ("********************************************* if (transfer.isflag ()) {break; // Se o registro for bem -sucedido, o registro não será repetido}} catch (desconhecidohostexception e) {e.printStacktrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {}} SHOSTUPLOADFILE (); // Faça o upload do arquivo após o login com sucesso}}}As renderizações da operação são as seguintes:
O arquivo foi salvo no banco de dados. Este projeto é muito bom para amigos que desejam praticar a comunicação do soquete e o MySQL.
O exposto acima é o uplso de arquivo simples do soquete Java+MySQL introduzido pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!