امروز میخوام نحوه کار با FTP بصورت ساده برای کاربران و برنامه نویسان مبتدی رو آموزش بدم.
برای استفاده از FTP نیاز به یک اکانت FTP در سایت مورد نظر بهمراه دسترسی به پوشه ای مشخص میباشد.
برای مثال ما یک اکانت FTP در سایت dotnettip.info داریم که به پوشه upload دسترسی داره.
ابتدا در فایل Web.config و در بین تگ های appSettings مقادیر زیر را برای دسترسی به اکانت و نام کاربری و رمز عبور ذخیره میکنیم.
*نکته : برای امنیت بیشتر و دسترسی به اطلاعات اکانت میشود از روشهای دیگری نیز استفاده کرد.
در ادامه یک کلاس در App_code پروژه خود با نام FTPHelper ایجاد میکنیم و کد زیر را در آن قرار میدهیم:
تکه کد بالا برای ست کردن مقادیر نام کاربری و رمز عبور و آدرس FTP در کلاس مذکور که بصورت پیشفرض از web.config پر میشود ایجاد و بکار خواهد رفت.
سپس فضای نامهای زیر را در کلاس خود قرار میدهیم.
حالا برای بارگذاری فایل میتوانیم از یک تابع بصورت shared استفاده کنیم که بتوان با دادن آدرس فایل بصورت فیزیکی به تابع و مشخص کردن پوشه مورد نظر آنرا در هاست مقصد (FTP) بارگذاری کرد.توجه داشته باشیذ که تابع فوق نیازی به قرار گرفتن در کلاس بالا (FtpHelper) ندارد.یعنی میتوان آنرا در هرجای برنامه پیاده سازی نمود.
تکه کد بالا فایل مورد نظر را در صورت وجود به صورت تکههای 100 کیلوبایتی بر روی ftp بارگذاری میکند، که میتوانید مقدار آنرا نیز تغییر دهید.
اینکار باعث افزایش سرعت بارگذاری در فایلهای با حجم بالا برای بارگذاری میشود.
در بخشهای بعدی نحوه ایجاد پوشه ، حذف فایل ، حذف پوشه و دانلود فایل از روی FTP را بررسی خواهیم کرد.
برای استفاده از FTP نیاز به یک اکانت FTP در سایت مورد نظر بهمراه دسترسی به پوشه ای مشخص میباشد.
برای مثال ما یک اکانت FTP در سایت dotnettip.info داریم که به پوشه upload دسترسی داره.
ابتدا در فایل Web.config و در بین تگ های appSettings مقادیر زیر را برای دسترسی به اکانت و نام کاربری و رمز عبور ذخیره میکنیم.
<add key="FtpAddress" value="ftp://ftp.dotnetips.info" /> <add key="FtpUser" value="uploadcenter" /> <add key="FtpPass" value="123123" /> <add key="FolderPath" value="~/Upload/" />
در ادامه یک کلاس در App_code پروژه خود با نام FTPHelper ایجاد میکنیم و کد زیر را در آن قرار میدهیم:
تکه کد بالا برای ست کردن مقادیر نام کاربری و رمز عبور و آدرس FTP در کلاس مذکور که بصورت پیشفرض از web.config پر میشود ایجاد و بکار خواهد رفت.
using System.Net; using System.IO; using System.Configuration; public class FtpHelper { public FtpHelper() { //Default Value Set From Application _hostname = ConfigurationManager.AppSettings.GetValues("FtpAddress")[0]; _username = ConfigurationManager.AppSettings.GetValues("FtpUser")[0]; _password = ConfigurationManager.AppSettings.GetValues("FtpPass")[0]; } #region "Properties" private string _hostname; /// <summary> /// Hostname /// </summary> /// <value></value> /// <remarks>Hostname can be in either the full URL format /// ftp://ftp.myhost.com or just ftp.myhost.com /// </remarks> public string Hostname { get { if (_hostname.StartsWith("ftp://")) { return _hostname; } else { return "ftp://" + _hostname; } } set { _hostname = value; } } private string _username; /// <summary> /// Username property /// </summary> /// <value></value> /// <remarks>Can be left blank, in which case 'anonymous' is returned</remarks> public string Username { get { return (_username == "" ? "anonymous" : _username); } set { _username = value; } } private string _password; public string Password { get { return _password; } set { _password = value; } } #endregion }
سپس فضای نامهای زیر را در کلاس خود قرار میدهیم.
using System.Net; using System.IO;
public static bool Upload(string fileUrl) { if (File.Exists(fileUrl)) { FtpHelper ftpClient = new FtpHelper(); string ftpUrl = ftpClient.Hostname + System.IO.Path.GetFileName(fileUrl); FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpUrl); ftp.Credentials = new NetworkCredential(ftpClient.Username, ftpClient.Password); ftp.KeepAlive = true; ftp.UseBinary = true; ftp.Timeout = 3600000; ftp.KeepAlive = true; ftp.Method = WebRequestMethods.Ftp.UploadFile; const int bufferLength = 102400; byte[] buffer = new byte[bufferLength]; int readBytes = 0; //open file for reading using (FileStream fs = File.OpenRead(fileUrl)) { try { //open request to send using (Stream rs = ftp.GetRequestStream()) { do { readBytes = fs.Read(buffer, 0, bufferLength); fs.Write(buffer, 0, readBytes); } while (!(readBytes < bufferLength)); rs.Close(); } } catch (Exception) { //Optional Alert for Exeption To Application Layer //throw (new ApplicationException("بارگذاری فایل با خطا رو به رو شد")); } finally { //ensure file closed //fs.Close(); } } ftp = null; return true; } return false; }
تکه کد بالا فایل مورد نظر را در صورت وجود به صورت تکههای 100 کیلوبایتی بر روی ftp بارگذاری میکند، که میتوانید مقدار آنرا نیز تغییر دهید.
اینکار باعث افزایش سرعت بارگذاری در فایلهای با حجم بالا برای بارگذاری میشود.
در بخشهای بعدی نحوه ایجاد پوشه ، حذف فایل ، حذف پوشه و دانلود فایل از روی FTP را بررسی خواهیم کرد.