تعلم كيفية رفع الملفات على سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعلم كيفية رفع الملفات على سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API

مُساهمة من طرف أحمد مناع في الأربعاء فبراير 12, 2014 12:07 pm

بسم الله الرحمن الرحيم


أهلا وسهلا بكم إخوانى الكرام ... درس اليوم عن كيفية تعلم كيفية رفع الملفات من جهاز الكمبيوتر على سرفر الخاص بك عن طريق بروتوكول نقل المفات FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API و هى أحد المكتبات مفتوحة المصدر التى يعتمد عليها مطورى الجافا التى تتيح لهم رفع الملفات على الخادم بكل سهولة

ليس هذا فحسب بل ان تلك المكتبة تستطيع من خلالها أجراء عمليات كثيرة على الخادم من خلال البروتوكول FTP منها : إنشاء اتصال بالخادم , الحصول على كافة الملفات على الخادم ,تحميل الملفات من الخادم ,إنشاء وحذف دلائل على الخادم , حذف ملفات على الخادم ......الخ

اليوم سنتخدم تلك المكتبة فى كيفية رفع ملف الى الخادم حيث توفر تلك المكتبة الفئة FTPClient و التى لديها 6 طرق أو اساليب لنقل ملف محلي إلى ملقم بعيد عبر بروتوكول  FTP وهما على النحو التالى :



  •  boolean storeFile(String remote, InputStream local)
  •  OutputStream storeFileStream(String remote)
  •  boolean storeUniqueFile(InputStream local)
  •  boolean storeUniqueFile(String remote, InputStream local)
  •  OutputStream storeUniqueFileStream()
  •  OutputStream storeUniqueFileStream(String remote)


ولكننا فى هذا الدرس سنتحدث عن الطريقة الاولى و الثانية لذلك وقبل البدء قم بتحميل المكتبة من هنــــــــــــــــــــا ثم فك الضغط ووضع الملف apache-commons-net.jar داخل مجلد التطبيق ومن ثم إدراجة الى المشروع

أولا : كيفية رفع الملفات بالطريقة الاولى storeFile

1_ إستيراد مكتبات العمل اللازمة

الرمز:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
 
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

2_ داخل الدالة الرئسية نقوم بالاعلان عن المتغيرات التالية :

الرمز:
String server = "www.myserver.com";
        int port = 21;
        String user = "user";
        String pass = "pass";

المتغير الاول server لتخزين عنوان الخاد فيه
المتغير الثانى port لتخزين المنفذ للخادم .....الافتراضى 21
و المتغير الثالث و الرابع لتخزين اسم المستخدم و كلمة المرور للخادم

3_ بعد ذلك نقوم بانشاء مثيل جديد من الفئة FTPClient و ذلك على النحو التالى :

الرمز:
FTPClient ftpClient = new FTPClient();

4_ نقوم بانشاء اتصال مع الخادم من خلال الاسلوب connect مع تمرير عنوان الاتصال و رقم المنفذ لهذا الاسلوب على النحو التالى :
الرمز:
ftpClient.connect(server, port);

5_ نقوم بعمل تسجيل دخول للخادم باستخدام الاسلوب login مع تمرير اسم المستخدم و كلمة المرور على النحو التالى :

الرمز:
ftpClient.login(user, pass);

6_ افتراضيا يقوم بروتوكول FTP بتأسيس اتصال من خلال فتح منفذ على العميل ويسمح الملقم الاتصال من هذا المنفذ. وهذا ما يسمى الوضع النشط ... ولكن عادة ما يتم حظرها من قبل جدار الحماية لذلك قد لا تستطيع رفع الملفات.... لحسن الحظ فإن بروتوكول FTP لديه طريقة أخرى وهى الوضع الخامل أو السلبي بحيث لا يتم الحظر من قبل جدار الحماية.....لذلك فمن المستحسن التبديل إلى الوضع الخامل أو السلبي المحلية قبل نقل البيانات، بواسطة استدعاء الأسلوب enterLocalPassiveMode على النحو التالى :

الرمز:
ftpClient.enterLocalPassiveMode();

7_ نقوم بتحديد نوع الملف أما ان يكون FTP.ASCII_FILE_TYPE أو FTP.BINARY_FILE_TYPE و ذلك من خلال الاسلوب setFileType ويستخدم لرفع الملفات النوع الافتراضي الاول هو ASCII_FILE_TYPE  ولكن يجب أن يتم تعيين للنوع الثنائي من أجل العمل مع أي ملفات و ذلك على النحو التالى :

الرمز:
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

8_ تحديد أسم و مسار الملف المراد رفعة من على جهازك الخاص على النحو التالى :

الرمز:
File firstLocalFile = new File("E:/LICENSE.txt");

9_تعين المسار الذى سيتم الرفع عليه :

الرمز:
String firstRemoteFile = "LICENSE.txt";

الكود أعلاه يوضح اننا سنقوم برفع الملف على الديل الجزر root

10_ استخدام الكائن InputStream  لبدء قارئة الملف  :
الرمز:
InputStream inputStream = new FileInputStream(firstLocalFile);


11_ اسدعاء الطريقة storeFile لرفع الملف :

الرمز:
boolean done = ftpClient.storeFile(firstRemoteFile, inputStream);

و الكود الكامل للمثال على النحو التالى :

الرمز:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
 
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;



public class NewMain {

    public static void main(String[] args) {
        
        String server = "www.myserver.com";
        int port = 21;
        String user = "user";
        String pass = "pass";
 
       FTPClient ftpClient = new FTPClient();
        try {
 
           ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.enterLocalPassiveMode();
 
           ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
 
           // APPROACH #1: uploads first file using an InputStream
            File firstLocalFile = new File("E:/LICENSE.txt");
 
           String firstRemoteFile = "LICENSE.txt";
            InputStream inputStream = new FileInputStream(firstLocalFile);
 
           System.out.println("Start uploading first file");
            boolean done = ftpClient.storeFile(firstRemoteFile, inputStream);
            inputStream.close();
            if (done) {
                System.out.println("The first file is uploaded successfully.");
            }
 
           
            inputStream.close();
            
            }
 
       } catch (IOException ex) {
            System.out.println("Error: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
 
   }
}


ثانيا : أستخدام الطريقة storeFileStream لرفع الملف


الكود الكامل على النحو التالى :

الرمز:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
 
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;



public class NewMain {

    public static void main(String[] args) {
        
        String server = "www.myserver.com";
        int port = 21;
        String user = "user";
        String pass = "pass";
 
       FTPClient ftpClient = new FTPClient();
        try {
 
           ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.enterLocalPassiveMode();
 
           ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
 
     
            File firstLocalFile = new File("E:/LICENSE.txt");
 
           String firstRemoteFile = "LICENSE.txt";
            InputStream inputStream = new FileInputStream(firstLocalFile);
 
           System.out.println("Start uploading first file");
            OutputStream outputStream = ftpClient.storeFileStream(firstRemoteFile);
            byte[] bytesIn = new byte[4096];
            int read = 0;
 
           while ((read = inputStream.read(bytesIn)) != -1) {
                outputStream.write(bytesIn, 0, read);
            }
            inputStream.close();
            outputStream.close();
 
           boolean completed = ftpClient.completePendingCommand();
            if (completed) {
                System.out.println("The second file is uploaded successfully.");
            }
 
       } catch (IOException ex) {
            System.out.println("Error: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
 
   }
}

لاحظ الفرق بينهما بنفسك

تحياتى لكم  Very Happy

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم كيفية رفع الملفات على سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API

مُساهمة من طرف لمار عادل في السبت يناير 10, 2015 2:26 pm

شكرا لك استاذى

لمار عادل
..
..

تاريخ التسجيل : 29/05/2013
المساهمات : 28
النقاط : 46
التقيم : 2
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى