لقد تعلمت مؤخرًا مشروعًا صغيرًا من موقع ويب معين. لأن لدي دروس خلال النهار ، كتبت لهم جميعًا في الليل. لقد أكملته اليوم.
يقوم المشروع بتطبيق ملف تحميل ملفات ، وتحميل الملفات المحلية إلى قاعدة بيانات الخادم (محلية) من خلال تسجيل الدخول العميل.
أولاً ، قم بإنشاء جدولين على النحو التالي:
جدول معلومات الملف
إنشاء جدول `fileInfo` (` fname` char (50) not null ، `finfo` blob not null ،` fid` int (10) not null auto_increment ، المفتاح الأساسي (`fid`)) engine = innodb auto_increment = 4 default charset = utf8 ؛
جدول معلومات المستخدم
قم بإنشاء جدول `user '(` username` char char (25) not null ، `password` char (25) not null ،` useId` int (10) not null auto_increment ، المفتاح الأساسي (usid`)) المحرك = innodb auto_increment = 19 charset = utf8 ؛
فئة المستخدم
حزمة fileUpload ؛ استيراد java.io.serializable ؛ /** فئة كيان المستخدم*/ مستخدم الفئة العامة يطرف قابلة للتسلسل {private Static Final Long SerialVersionuid = -72790933338433393181L ؛ private int useId ؛ // رقم المستخدم سلسلة usename ؛ // اسم المستخدم سلسلة uSPSD ؛ // كلمة مرور المستخدم المستخدم العام () {} المستخدم العام (سلسلة usename ، string uSPD) {super () ؛ this.usename = اسم المستخدم ؛ this.usepsd = usepsd ؛ } المستخدم العام (int useId ، string usename ، string usepsd) {super () ؛ this.useid = useId ؛ this.usename = اسم المستخدم ؛ this.usepsd = usepsd ؛ } public int getuseid () {return useId ؛ } public void setuseid (int useId) {this.useid = useId ؛ } السلسلة العامة getUsename () {return usename ؛ } public void setusename (string usename) {this.usename = usename ؛ } السلسلة العامة getUsepsd () {return uSpsd ؛ } public void setusepsd (string uSpsd) {this.usepsd = uSpsd ؛ }}فئة المستخدمين
حزمة fileUpload ؛ / *** فئة تسجيل الدخول وتسجيل المستخدم*/ استيراد java.sql.connection ؛ استيراد java.sql.drivermanager ؛ استيراد java.sql.preparedStatement ؛ استيراد java.sql.resultset ؛ استيراد java.sql.sqlexception ؛ الفئة العامة orseverservice {private connection conn = null ؛ Private ReparedStatement PTMT = NULL ؛ نتائج خاصة RS = فارغة ؛ // تسجيل الدخول إلى المستخدم Boolean Login (مستخدم المستخدم) {String url = "jdbc: mysql: // localhost: 3306/fileupload" ؛ // سلسلة قاعدة البيانات سلسلة sql = "حدد * من المستخدم where username =؟ و password =؟" ؛ حاول {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 (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {rs.close () ؛ ptmt.close () ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ }} إرجاع خطأ ؛ }. url url = "jdbc: mysql: // localhost: 3306/fileupload" ؛ // سلسلة اتصال قاعدة البيانات sql = "إدراج في قيم المستخدم (اسم المستخدم ، كلمة المرور) (؟ ،؟)" ؛ حاول {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 (استثناء e) {E.PrintStackTrace () ؛ العودة كاذبة } أخيرًا {try {//rs.close () ؛ ptmt.close () ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ }} إرجاع صحيح ؛ }}فئة fileiofo
حزمة fileUpload ؛ استيراد java.io.serializable ؛ ! private int fid ؛ // number file private fname ؛ // file name byte 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 ؛ } السلسلة العامة getFname () {return fname ؛ } public void setFname (String fname) {this.fname = fname ؛ } public byte [] getFcontent () {return fcontent ؛ } public void setfcontent (byte [] fcontent) {this.fcontent = fcontent ؛ }}فئة FileService
حزمة fileUpload ؛ / *** فئة تشغيل تحميل الملف*/ استيراد java.sql.connection ؛ استيراد java.sql.drivermanager ؛ استيراد java.sql.preparedStatement ؛ استيراد java.sql.sqlexception ؛ الفئة العامة FileRevice {private connection conn = null ؛ Private ReparedStatement PTMT = NULL ؛ // احفظ الملف إلى قاعدة البيانات المنطقية العامة حفظ (ملف fileInfo) {String url = "jdbc: mysql: // localhost: 3306/fileupload" ؛ // database string string sql = "insert in fileInfo (fname ، finfo) value (؟ ،؟)" حاول {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 (استثناء e) {E.PrintStackTrace () ؛ العودة كاذبة } أخيرًا {try {ptmt.close () ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ }} إرجاع صحيح ؛ }} حزمة fileUpload ؛
استيراد java.io.ioException ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ /** ابدأ فئة الخادم*/ الفئة العامة starterver {suppressWarnings ("Resource") public static void main (string [] args) {try {// 1. قم بإنشاء مقبس من جانب الخادم ، أي ، Serversocket ، حدد المنفذ المربوطة ، واستمع إلى Serversoctocket STERVESCTOCKET (8888) ؛ مقبس المقبس = فارغ ؛ System.out.println ("لقد تم بدء الخادم ، في انتظار العميل للاتصال ...") ؛ // استمع منذ فترة طويلة لانتظار اتصال العميل بينما (صحيح) {// 2. اتصل بالطريقة قبول () لبدء الاستماع ، في انتظار مقبس اتصال العميل = serversocket.accept () ؛ // إنشاء مؤشر ترابط جديد ServerThread ServerThread = New ServerThread (Socket) ؛ // ابدأ مؤشر الترابط serverThRead.start () ؛ }} catch (ioException e) {// TODO التي تم إنشاؤها تلقائيًا كتلة catch e.printstacktrace () ؛ }}}} [java] عرض شرائح رمز عرض النسخ العادي المشتقة من حزمة شرائح الكود الخاصة بي ؛ استيراد java.io.ioException ؛ / ** * ابدأ فئة العميل */ الفئة العامة startClient {public static void main (string [] args) يلقي ioException {socketClient client = new SocketClient () ؛ client.showmainmenu () ؛ // إظهار القائمة الرئيسية}}حزمة fileUpload ؛
استيراد java.io.ioException ؛ استيراد java.io.objectinputStream ؛ استيراد java.io.objectOutputStream ؛ استيراد java.net.socket ؛ استيراد javax.swing.joptionpane ؛ /** فئة multithreading من جانب الخادم*/ ServerThread الفئة العامة يمتد Thread {Static Socket Socket = null ؛ كائن ثابت خاص OIS = NULL ؛ // إدخال الكائنات الدفق الخاص كائن خاص ObjectOutputStream OOS = null ؛ // كائن دفق المستخدم الخاص UsperService US = New UsperService () ؛ // مستخدم كائن الأعمال الخاص FileService fs = new fileberervice () ؛ } public void run () {try {ois = new ObjectInputStream (socket.getInputStream ()) ؛ // استلام الرسائل المرسلة بواسطة العميل oos = new ObjectOutputStream (socket.getOutputStream ()) ؛ // المستخدمة لإرسال الرسائل إلى النقل العميل إلى النقل = (commandTransfer) oiS.ReadObject () ؛ // اقرأ عملية الأمر المرسلة من العميل إلى نقل الخادم = تنفيذ (نقل) ؛ // تنفيذ عملية الأمر المرسلة من قبل العميل إلى الخادم OOS.WriteObject (نقل) ؛ // الرد على العميل} catch (ioException | classnotfoundException e) {E.PrintStackTrace () ؛ }}/** قم بتنفيذ عملية الأمر المرسلة من قبل العميل إلى الخادم*/ commandTransfer execute (commandTransfer Transfer) {String cmd = transfer.getcmd () ؛ // الحصول على الأمر للعملية الحالية إذا (cmd.equals ("تسجيل الدخول")) العلم المنطقي = us.login (المستخدم) ؛ إذا (العلم) joptionpane.showmessagedialog (null ، "تسجيل الدخول بنجاح!") ؛ transfer.setFlag (flag) ؛ if (flag) {// ugn armain reclugy transfer.setResult ("login بنجاح!") ؛ } آخر {transfer.setResult ("اسم المستخدم أو كلمة المرور غير صحيح ، يرجى تسجيل الدخول مرة أخرى!") ؛ }} else if (cmd.equals ("register")) {// user user user user = (user) transfer.getData () ؛ us.register (user) ؛ // regling user boolean flag = us.register (user) ؛ if (flag) joptionpane.showmessagedialog (NULL ، "سجل بنجاح!") ؛ transfer.setFlag (flag) ؛ if (flag) {transfer.setResult ("سجل ناجح!") ؛ } آخر {transfer.setResult ("فشل التسجيل!") ؛ }} آخر إذا (cmd.equals ("eploadfile")) {fileInfo file = (fileInfo) transfer.getData () ؛ fs.save (ملف) ؛ العلم المنطقي = fs.save (ملف) ؛ if (flag) joptionpane.showmessagedialog (null ، "تم تحميله بنجاح!") ؛ transfer.setFlag (flag) ؛ if (flag) {transfer.setResult ("تم تحميله بنجاح!") ؛ } آخر {transfer.setResult ("فشل التحميل!") ؛ }} نقل الإرجاع ؛ }} package fileUpload ؛ استيراد java.io.bufferedInputStream ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.filenotfoundException ؛ استيراد java.io.ioException ؛ استيراد java.io.objectinputStream ؛ استيراد java.io.objectOutputStream ؛ استيراد java.net.socket ؛ استيراد java.net.unknownhostexception ؛ استيراد java.util.scanner ؛ / ** * فئة القائمة الرئيسية */ الفئة العامة SocketClient {Scanner INPUT = New Scanner (System.in) ؛ مقبس المقبس الثابت الخاص = null ؛ // مقبس العميل // القائمة الرئيسية الفراغ العام showmainmenu () يلقي ioException {system.out.println ( system.out.println ("1.login/n2.register/n3.login") ؛ system.out.println ("************************************** System.out.println ("الرجاء تحديد:") ؛ int choice = input.nextint () ؛ // الحصول على مقبس اختيار المستخدم = مقبس جديد ("LocalHost" ، 8888) ؛ التبديل (الاختيار) {الحالة 1: showlogin () ؛ // تسجيل الدخول إلى كسر ؛ الحالة 2: showregister () ؛ // Record Break ؛ الحالة 3: System.out.println ("مرحبًا بك لدعم هذا النظام") ؛ System.exit (0) ؛ الافتراضي: system.out.println ("الإدخال غير صحيح!") ؛ System.exit (0) ؛ }} // تسجيل المستخدم الخاص void showregister () يلقي ioException {user user = new user () ؛ commandTransfer Transfer = new CommandTransfer () ؛ int count = 0 ؛ // عدد أوقات تسجيل الدخول بينما (صحيح) {count ++ ؛ if (count> 3) {system.out.println ("لقد فشلت في تسجيل الدخول 3 مرات متتالية ، يخرج البرنامج!") ؛ System.exit (0) ؛ } system.out.print ("الرجاء إدخال اسم المستخدم:") ؛ user.setusename (input.next ()) ؛ System.out.print ("الرجاء إدخال كلمة المرور:") ؛ user.setusepsd (input.next ()) ؛ System.out.print ("الرجاء إدخال كلمة المرور مرة أخرى:") ؛ string repassword = input.next () ؛ if (! user.getusepsd (). equals (repassword)) {system.out.println ("كلمات المرور التي تم إدخالها مرتين غير متسقة!") ؛ System.out.println ("*********************") ؛ يكمل؛ } transfer.setcmd ("register") ؛ transfer.setData (المستخدم) ؛ جرب {sendData (نقل) ؛ // إرسال البيانات إلى نقل الخادم = getData () ؛ // الحصول على البيانات التي تم إرجاعها بواسطة server system.out.println (transfer.getResult ()) if (transfer.isflag ()) {break ؛ // إذا كان التسجيل ناجحًا ، فلن يتم تكرار التسجيل}} catch (unknownhostexception e) {eprintstacktrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {}} showlogin () ؛ // تسجيل الدخول بعد التسجيل ناجح} // الحصول على بيانات الخادم العام الثابت getData () يلقي iOexception {// todo method method method abountinputstream ois = null ؛ commandTransfer res = null ؛ حاول {if (socket.isclosed ()) socket = مقبس جديد ("localhost" ، 8888) ؛ OIS = جديد ObjectInputStream (Socket.getInputStream ()) ؛ res = (commandTransfer) ois.ReadObject () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ } catch (classnotfoundException e) {// todo catch catch e.printstacktrace () ؛ } أخيرًا {if (ois! = null) {try {ois.close () ؛ //socket.close () ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }}} return res ؛ } /** upload file* / private void showuploadfile () يلقي ioException {system.out.println ("الرجاء إدخال المسار المطلق لتحميل الملف:") ؛ مسار السلسلة = input.next () ؛ ملف fileInfo = null ؛ FileInputStream Fis = NULL ؛ BufferedInputStream BIS = NULL ؛ String fname = path.substring (path.lastindexof ("/") + 1) ؛ حاول {fis = جديد fileInputStream (path) ؛ byte [] fcontent = new byte [fis.available ()] ؛ BIS = جديد bufferedInputStream (FIS) ؛ Bis.Read (fcontent) ؛ ملف = fileInfo جديد (fname ، fcontent) ؛ } catch (fileNotFoundException e) {e.printStackTrace () ؛ } أخيرًا {bis.close () ؛ fis.close () ؛ } commandTransfer Transfer = new CommandTransfer () ؛ transfer.setcmd ("uploadfile") ؛ transfer.setData (ملف) ؛ حاول {sendData (نقل) ؛ // إرسال البيانات إلى نقل الخادم = getData () ؛ // الحصول على البيانات التي يتم إرجاعها بواسطة server system.out.println (transfer.getResult ()) ؛ // risearch display result} catch (غير معروف e) {E.PrintStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {}} // إرسال البيانات إلى الخادم الفراغ الثابت sendData (commandTransfer CMD) يلقي ioException {// todo method method abomouroutoutputstream oos = null ؛ جرب {if (socket.isclosed ()) // ugge ما إذا كان المقبس مغلقًا. إذا تم إغلاقه ، فتح المقبس = مقبس جديد ("LocalHost" ، 8888) ؛ OOS = new ObjectOutputStream (Socket.getOutputStream ()) ؛ OOS.WriteObject (CMD) ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }} // يقوم المستخدم بتسجيل الدخول إلى private void showlogin () يلقي ioException {user user = new user () ؛ commandTransfer Transfer = new CommandTransfer () ؛ بينما (صحيح) {system.out.print ("الرجاء إدخال اسم المستخدم:") ؛ user.setusename (input.next ()) ؛ System.out.print ("الرجاء إدخال كلمة المرور:") ؛ user.setusepsd (input.next ()) ؛ transfer.setcmd ("تسجيل الدخول") ؛ transfer.setData (المستخدم) ؛ حاول {sendData (نقل) ؛ // إرسال البيانات إلى نقل الخادم = getData () ؛ // الحصول على البيانات التي تم إرجاعها بواسطة server system.out.println (transfer.getResult ()) if (transfer.isflag ()) {break ؛ // إذا نجح التسجيل ، فلن يتم تكرار التسجيل}} catch (unknownhostexception e) {E.PrintStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {}} showuploadfile () ؛ // قم بتحميل الملف بعد تسجيل الدخول بنجاح}}}عروض التشغيل هي كما يلي:
تم حفظ الملف إلى قاعدة البيانات. هذا المشروع جيد جدًا للأصدقاء الذين يرغبون في ممارسة التوصيل المقبس و MySQL.
ما سبق هو تطبيق Java Socket+MySQL تطبيق تحميل ملفات بسيط تم تقديمه بواسطة المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!