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

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

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

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

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

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

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



  • retrieveFileStream
  • retrieveFile 



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


أولا : تحميل ملف بأستخدام الطريقة retrieveFileStream 

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_ تحديد أسم و مسار الملف المراد تحمليه من السرفر على النحو التالى :

الرمز:
String remoteFile2 = "/test/song.mp3";


9_تعين مسار الحفظ على الجهاز 

الرمز:
File downloadFile2 = new File("D:/Downloads/song.mp3");


10_نقوم بالاعلان عن الكائن OutputStream لقراءة الملف على النحو التالى :

الرمز:
OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));

11_ نقوم بالاعلان عن الكائن InputStream ثم تمرير الية الطريقة retrieveFileStream  على النحو التالى :

الرمز:
 InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);

12_ نقوم بانشاء مصفوفة من نوع byte لتخزين ما يتم قرائة من الملف فى تلك المصفوفة بالبايت على النحو التالى :

الرمز:
 byte[] bytesArray = new byte[4096];

و يمكنك ملاحظة اننا قمنا بتحديد حجم المصفوفة بــــ 4096 و الذى يمثل 4 ميجا بايت و الهدف من ذلك اخبار التطبيق انه كلما تم تم تخزين 4 ميجا بايت يتم تحمليهم ثم يعاود القراءة من جديد ....وهكذا يتم تقسيم الملف فيسهل و يسرع عملية التحميل

13_ نقوم بعمل حلقة تكرارية للحصول على كافة البايت المخزن فى المصفوفة ومن ثم كتابتها الى الملف و ذلك على النحو التالى :

الرمز:
 int bytesRead = -1;
            while ((bytesRead = inputStream.read(bytesArray)) != -1) {
                outputStream2.write(bytesArray, 0, bytesRead);
            }


14_ التأكد من اتمام عملية التحميل ....فاذا كانت ناجحة يتم اظهار رسالة للمستخدم بذلك

الرمز:
success = ftpClient.completePendingCommand();
            if (success) {
                System.out.println("File #2 has been downloaded successfully.");
            }




و اليكم الكود الكامل لتحميل ملف باستخدام الطريقة retrieveFileStream

الرمز:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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 FTPDownloadFileDemo {
 
    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);
 
          
            String remoteFile2 = "/test/song.mp3";
            File downloadFile2 = new File("D:/Downloads/song.mp3");
            OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));
            InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);
            byte[] bytesArray = new byte[4096];
            int bytesRead = -1;
            while ((bytesRead = inputStream.read(bytesArray)) != -1) {
                outputStream2.write(bytesArray, 0, bytesRead);
            }
 
            success = ftpClient.completePendingCommand();
            if (success) {
                System.out.println("File #2 has been downloaded successfully.");
            }
            outputStream2.close();
            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();
            }
        }
    }
}


ثانيا : تحميل ملف باستخدام retrieveFile 

و اليكم الكود الكامل باستخدام تلك الطريقة :

الرمز:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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 FTPDownloadFileDemo {
 
    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);
 
          
            String remoteFile1 = "/test/video.mp4";
            File downloadFile1 = new File("D:/Downloads/video.mp4");
            OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
            boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
            outputStream1.close();
 
            if (success) {
                System.out.println("File #1 has been downloaded 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

مُساهمة من طرف ذوكا في الأربعاء فبراير 19, 2014 2:07 pm


تسلم ايدك أخى و استاذى أحمد على هذا الموضوع القيم صراحة

ذوكا
.....
.....

تاريخ التسجيل : 26/05/2013
المساهمات : 92
النقاط : 155
التقيم : 11
الدولة : مصر
الجنس : ذكر

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

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

مُساهمة من طرف NEXT في الجمعة ديسمبر 26, 2014 7:41 am

رائع

NEXT
الادارة
الادارة

تاريخ التسجيل : 18/02/2011
المساهمات : 262
النقاط : 378
التقيم : 10
الجنس : ذكر

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

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


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