imanEsmaeili
پنج شنبه 14 بهمن 1389, 19:23 عصر
با سلام
من از کتابخانه commons-net-2.2.jar برای برقرای ارتباط ftp با هاست و کنترل دایرکتوری ها و آپلود کردن فایلها بر روی هاستم استفاده می کنم و از دستوراتی که در زیر می آورم بترتیب برای
1- برقراری ارتباط ftp با هاست
2- لیست کردن فایلهای موجود در یک دایرکتوری از هاست
3- آپلود کردن یک فایل در یکی از دایرکتوری های موجود در هاست
استفاده می کنم.من دستورات را دریک servlet نوشته ام و از یک صفحه وب سرولت موردنظر را فراخوانی می کنم توضیحات کامل در زیر آورده شده است.
در ابتدا من کلاسهای زیر را که مربوط به کتابخانه commons-net-2.2.jar می باشد به کد خودم import می کنم.
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
پس از آن در ابتدا باید یک ارتباط از طریق پروتکل FTP با هاستم برقرار نمایم که برای این کار از دستورات زیر استفاده می کنم.
FTPClient client = new FTPClient();
// Connect to the FTP server as anonymous
client.connect("www.salekan.ir");// setting ftp host
client.login( "MyUsername", "MyPassword" ); //setting ftp username and password
client.setFileType(FTP.BINARY_FILE_TYPE);
String remoteDir = "/htdocs/images";
client.changeWorkingDirectory(remoteDir);// change working directory to htdocs/images
int reply=client.getReplyCode();
if(FTPReply.isPositiveCompletion(reply)){// testing the connection
out.print("Connected Success...<br/>");
}
سپس با استفاده از دستورات زیر فایلهای موجود در فولدر htdocs/images را لیست می کنم.
FTPFile[] remoteFiles = client.listFiles();//listing files on the folder to a array
out.print( "Files in " + remoteDir+" count= "+ remoteFiles.length +"<br/>" );
for (int i = 0; i < remoteFiles.length; i++) {
String name = remoteFiles[i].getName( );
long length = remoteFiles[i].getSize( );
out.print( name + ":\t\t" + length +"<br/>" );
}
و در نهایت با استفاده از دستورات زیر فایلtext1.txt را که مسیر و نام آن در یک شیی از نوع File مشخص شده را بر روی سرور آپلود می کنم و ارتباط با سرور را قطع می کنم.
File file=new File("c:\\text1.txt");
if(file.isFile()){
out.print("<br/>"+file.getName()+"<br/>");
InputStream in=new FileInputStream(file);
client.storeFile(file.getName(), in);
out.print("Uploading Success");
}
client.disconnect( );
این دستورات را وقتی روی localhost اجرا میکنم به درستی اجرا شده و فایل مورد نظر به درستی روی remote server آپلود می گردد ام وقتی برنامه مورد نظر را روی سرور میفرستم و از آنجا اجرا می کنم فقط قسمت اول و دوم یعنی برقراری ارتباط ftp و لیست کردن فایلهای موجود در فولدر به درستی انجام شده و قسمت آخر یعنی آپلود کردن فایل انجام نمی شود و هیچ خطایی هم صادر نمی شود.
من از کتابخانه commons-net-2.2.jar برای برقرای ارتباط ftp با هاست و کنترل دایرکتوری ها و آپلود کردن فایلها بر روی هاستم استفاده می کنم و از دستوراتی که در زیر می آورم بترتیب برای
1- برقراری ارتباط ftp با هاست
2- لیست کردن فایلهای موجود در یک دایرکتوری از هاست
3- آپلود کردن یک فایل در یکی از دایرکتوری های موجود در هاست
استفاده می کنم.من دستورات را دریک servlet نوشته ام و از یک صفحه وب سرولت موردنظر را فراخوانی می کنم توضیحات کامل در زیر آورده شده است.
در ابتدا من کلاسهای زیر را که مربوط به کتابخانه commons-net-2.2.jar می باشد به کد خودم import می کنم.
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
پس از آن در ابتدا باید یک ارتباط از طریق پروتکل FTP با هاستم برقرار نمایم که برای این کار از دستورات زیر استفاده می کنم.
FTPClient client = new FTPClient();
// Connect to the FTP server as anonymous
client.connect("www.salekan.ir");// setting ftp host
client.login( "MyUsername", "MyPassword" ); //setting ftp username and password
client.setFileType(FTP.BINARY_FILE_TYPE);
String remoteDir = "/htdocs/images";
client.changeWorkingDirectory(remoteDir);// change working directory to htdocs/images
int reply=client.getReplyCode();
if(FTPReply.isPositiveCompletion(reply)){// testing the connection
out.print("Connected Success...<br/>");
}
سپس با استفاده از دستورات زیر فایلهای موجود در فولدر htdocs/images را لیست می کنم.
FTPFile[] remoteFiles = client.listFiles();//listing files on the folder to a array
out.print( "Files in " + remoteDir+" count= "+ remoteFiles.length +"<br/>" );
for (int i = 0; i < remoteFiles.length; i++) {
String name = remoteFiles[i].getName( );
long length = remoteFiles[i].getSize( );
out.print( name + ":\t\t" + length +"<br/>" );
}
و در نهایت با استفاده از دستورات زیر فایلtext1.txt را که مسیر و نام آن در یک شیی از نوع File مشخص شده را بر روی سرور آپلود می کنم و ارتباط با سرور را قطع می کنم.
File file=new File("c:\\text1.txt");
if(file.isFile()){
out.print("<br/>"+file.getName()+"<br/>");
InputStream in=new FileInputStream(file);
client.storeFile(file.getName(), in);
out.print("Uploading Success");
}
client.disconnect( );
این دستورات را وقتی روی localhost اجرا میکنم به درستی اجرا شده و فایل مورد نظر به درستی روی remote server آپلود می گردد ام وقتی برنامه مورد نظر را روی سرور میفرستم و از آنجا اجرا می کنم فقط قسمت اول و دوم یعنی برقراری ارتباط ftp و لیست کردن فایلهای موجود در فولدر به درستی انجام شده و قسمت آخر یعنی آپلود کردن فایل انجام نمی شود و هیچ خطایی هم صادر نمی شود.