يقوم FPClient بتنفيذ تحميل الملفات على الخادم المحدد للرجوع إليه. المحتوى المحدد كما يلي
يتصل
FileInputStream in = new FileInputStream (ملف جديد (fileurl)) ؛ MoveFile ("10.3.3. **" ، 21 ، "username" ، "password" ، path ، filename ، in) ؛طريقة
/ *** الوصف: تحميل ملف إلى خادم FTP* url url ftp server hostname* param port ftp server port* param username ftp login accoun MoveFile (url url ، منفذ int ، اسم مستخدم السلسلة ، كلمة مرور السلسلة ، مسار السلسلة ، اسم ملف السلسلة ، إدخال inputStream) {boolean success = false ؛ ftpclient ftp = new ftpclient () ؛ جرب {int reply ؛ ftp.connect (url ، port) ؛ // قم بتوصيل خادم FTP // إذا تم استخدام المنفذ الافتراضي ، يمكنك الاتصال مباشرة بخادم FTP باستخدام ftp.connect (url) ؛ ftp.login (اسم المستخدم ، كلمة المرور) ؛ // تسجيل الدخول = ftp.getReplyCode () ؛ if (! ftpreply.ispositivecOption (الرد)) {ftp.disconnect () ؛ العودة النجاح } // إنشاء المسار جرب {ftp.makedirectory (path) ؛ } catch (استثناء e) {} ftp.EnterLocalPassiveMode () ؛ ftp.ChangeWorkingDirectory (path) ؛ منطقية f = ftp.storefile (اسم الملف ، الإدخال) ؛ logger.error (f) ؛ input.close () ؛ ftp.logout () ؛ النجاح = صحيح ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {if (ftp.isconnected ()) {try {ftp.disconnect () ؛ } catch (ioException ioe) {}}} return success ؛ }بعض التفاصيل
FileInputStream.available () إرجاع العدد الفعلي للبايت القابل للقراءة ، أي الحجم الإجمالي.
عندما تتوقف طريقة ftpclient.storefile () هناك ، لا يوجد رد فعل ، وهناك حالة وفاة مزيفة.
الحل البديل: استدعاء ftpclient.enterlocalPassiveMode ()
المبدأ: نظرًا لأن خادم FTP قد يفتح منفذًا مختلفًا لنقل البيانات في كل مرة ، ولكن على Linux أو الخوادم الأخرى ، بسبب قيود الأمان ، قد لا يتم تمكين بعض المنافذ ، لذلك يحدث الانسداد.
منفذ FTP الافتراضي هو 21 ، SSH هو 22 ، ومنفذ الإرسال الفعلي هو 20
عرض المنفذ المحدد ، مثال 21
netstat -na | grep 21 (رقم المنفذ)
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.