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

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

اذهب الى الأسفل

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

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

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

أهلا وسهلا بكم إخوانى الكرام .... فى الدرس السابق [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] أما درس اليوم هو العكس بمعنى تحميل ملف من سرفر 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_ نقوم بتحديد نوع الملف أما ان يكون [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] أو [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] و ذلك من خلال الاسلوب setFileType ويستخدم لنقل الملفات النوع الافتراضي الاول هو ASCII_FILE_TYPE  ولكن يجب أن يتم تعيين للنوع الثنائي من أجل العمل مع أي ملفات و ذلك على النحو التالى :

الكود:
ftpClient.setFileType([ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]


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([ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
 
          
            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([ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
 
          
            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
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

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

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

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


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

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

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

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

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

رائع

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
تعلم كيفية تحميل الملفات من سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API Do.php?imgf=154090993464951
NEXT
NEXT
الادارة
الادارة

تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة : مصر
الجنس : ذكر

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

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


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