Maison > interface Web > tutoriel HTML > Gestion des fichiers FTP

Gestion des fichiers FTP

php中世界最好的语言
Libérer: 2018-03-16 14:22:41
original
6214 Les gens l'ont consulté

Cette fois, je vais vous présenter la gestion des fichiers FTP. Quelles sont les précautions pour gérer les fichiers FTP. Voici des cas pratiques, jetons un coup d'œil.

Étant donné que le site Web contient des fichiers téléchargés qui doivent être séparés du site Web, FTP est utilisé pour gérer les fichiers. Voici un arrangement simple.

1. L'installation de FTP

équivaut à l'installation d'iis. Vérifiez-les tous.

Définissez le nom et le chemin du site.

Définir l'adresse IP.

L'autorisation d'identité sélectionne tous les utilisateurs et peut lire et écrire.

Une fois terminé, IIS apparaîtra :

2. Ajouter un utilisateur FTP

Ordinateur- ->Gestion-->Utilisateurs et groupes locaux. Ajouter un utilisateur avec la description FTP.

Ici, vous devez définir la méthode de mot de passe de l'utilisateur et supprimer l'option "L'utilisateur doit changer le mot de passe la prochaine fois qu'il se connectera".

Sinon, la connexion échouera. Erreur 530 signalée.

3. Testez la connexion

IP FTP pour y accéder. L'affichage de 230 utilisateurs connectés indique une connexion réussie.

4. Télécharger et télécharger

FtpHelper :

 public static class FtpHelper
    {        //基本设置
        private const string Path = @"ftp://192.168.253.4:21/"; //目标路径
        private const string Ftpip = "192.168.253.4"; // GetAppConfig("obj");    //ftp IP地址
        private const string Username = "stone"; //GetAppConfig("username");   //ftp用户名
        private const string Password = "111111"; //GetAppConfig("password");   //ftp密码       // 2M 可能不够
        private const int bufferSize = 2048;        /// <summary>
        /// 获取自定义配置的值        /// </summary>
        /// <param name="strKey">键值</param>
        /// <returns>键值对应的值</returns>
        public static string GetAppConfig(string strKey)
        {            foreach (string key in ConfigurationManager.AppSettings)
            {                if (key == strKey)
                {                    return ConfigurationManager.AppSettings[strKey];
                }
            }            return null;
        }        //获取ftp上面的文件和文件夹
        public static string[] GetFileList(string dir)
        {            var result = new StringBuilder();            try
            {                var ftpRequest = FtpRequest(Path, WebRequestMethods.Ftp.ListDirectory);
                WebResponse response = ftpRequest.GetResponse();                var reader = new StreamReader(response.GetResponseStream());                string line = reader.ReadLine();                while (line != null)
                {
                    result.Append(line);
                    result.Append("\n");
                    Console.WriteLine(line);
                    line = reader.ReadLine();
                }                // to remove the trailing '\n'
                result.Remove(result.ToString().LastIndexOf('\n'), 1);
                reader.Close();
                response.Close();                return result.ToString().Split('\n');
            }            catch (Exception ex)
            {
                Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message);                return new[] {""};
            }
        }        /// <summary>
        ///     获取文件大小        /// </summary>
        /// <param name="file">ip服务器下的相对路径</param>
        /// <returns>文件大小</returns>
        public static int GetFileSize(string file)
        {            var result = new StringBuilder();
            FtpWebRequest request;            try
            {
                request = (FtpWebRequest) WebRequest.Create(new Uri(Path + file));
                request.UseBinary = true;
                request.Credentials = new NetworkCredential(Username, Password); //设置用户名和密码
                request.Method = WebRequestMethods.Ftp.GetFileSize;                var dataLength = (int) request.GetResponse().ContentLength;                return dataLength;
            }            catch (Exception ex)
            {
                Console.WriteLine("获取文件大小出错:" + ex.Message);                return -1;
            }
        }        /// <summary>
        ///     文件上传        /// </summary>
        /// <param name="localFile">原路径(绝对路径)包括文件名</param>
        /// <param name="remoteFile">目标文件夹:服务器下的相对路径 不填为根目录</param>
        public static bool UpLoad(string localFile, string remoteFile = "")
        {            try
            {                string url = Path;                if (remoteFile != "")
                    url += remoteFile + "/";                try
                {                    //待上传的文件 (全路径)
                    try
                    {                        var fileInfo = new FileInfo(localFile);                        using (FileStream fs = fileInfo.OpenRead())
                        {                            long length = fs.Length;
                            FtpWebRequest reqFtp = FtpRequest(url + fileInfo.Name,WebRequestMethods.Ftp.UploadFile);                            using (Stream stream = reqFtp.GetRequestStream())
                            {                                //设置缓冲大小
                                int BufferLength = 5120;                                var b = new byte[BufferLength];                                int i;                                while ((i = fs.Read(b, 0, BufferLength)) > 0)
                                {
                                    stream.Write(b, 0, i);
                                }
                                Console.WriteLine("上传文件成功");                                return true;
                            }
                        }
                    }                    catch (Exception ex)
                    {
                        Console.WriteLine("上传文件失败错误为" + ex.Message);
                    }                    finally
                    {
                    }
                }                catch (Exception ex)
                {
                    Console.WriteLine("上传文件失败错误为" + ex.Message);
                }                finally
                {
                }
            }            catch (Exception ex)
            {
                Console.WriteLine("上传文件失败错误为" + ex.Message);
            }            return false;
        }        public static bool UpLoad(Stream localFileStream, string remoteFile)
        {            bool result = true;            try
            {                var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.UploadFile);                var ftpStream = ftpRequest.GetRequestStream();                var byteBuffer = new byte[bufferSize];                int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);                try
                {                    while (bytesSent != 0)
                    {
                        ftpStream.Write(byteBuffer, 0, bytesSent);
                        bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
                    }
                }                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    result = false;
                }
                localFileStream.Close();
                ftpStream.Close();
            }            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                result = false;
            }            return result;
        }        public static FtpWebRequest FtpRequest(string requstUrl,string method,bool closedResponse=false)
        {            var reqFtp = (FtpWebRequest) WebRequest.Create(new Uri(requstUrl));            //设置连接到FTP的帐号密码
            reqFtp.Credentials = new NetworkCredential(Username, Password);            //设置请求完成后是否保持连接
            reqFtp.KeepAlive = false;            //指定执行命令
            reqFtp.Method = method;            //指定数据传输类型
            reqFtp.UseBinary = true;            if (closedResponse)
            {                var resp=reqFtp.GetResponse();
                resp.Close();
            }            return reqFtp;
        }        /// <summary>
        /// 下载        /// </summary>
        /// <param name="localFile">目的位置</param>
        /// <param name="remoteFile">服务器相对位置</param>
        /// <returns></returns>
        public static bool Download(string localFile,string remoteFile)
        {            bool check = true;            try
            {                var outputStream = new FileStream(localFile, FileMode.Create);                var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);                var response = (FtpWebResponse)ftpRequest.GetResponse();
                Stream ftpStream = response.GetResponseStream();                long cl = response.ContentLength;                int bufferSize = 2048;                int readCount;                var buffer = new byte[bufferSize];
                readCount = ftpStream.Read(buffer, 0, bufferSize);                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount); 
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                ftpStream.Close();
                outputStream.Close();
                response.Close();
            }            catch (Exception err)
            {
                check = false;
            }            return check;
        }        public static Stream Download(string remoteFile)
        {            var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);            var response = (FtpWebResponse)ftpRequest.GetResponse();
            Stream ftpStream = response.GetResponseStream();            return ftpStream;
        }        /// <summary>
        ///     删除文件        /// </summary>
        /// <param name="fileName">服务器下的相对路径 包括文件名</param>
        public static void DeleteFileName(string fileName)
        {            try
            {
               FtpRequest(Path + fileName, WebRequestMethods.Ftp.DeleteFile,true);
            }            catch (Exception ex)
            {
                Console.WriteLine("删除文件出错:" + ex.Message);
            }
        }        /// <summary>
        /// 新建目录 上一级必须先存在        /// </summary>
        /// <param name="dirName">服务器下的相对路径</param>
        public static void MakeDir(string dirName)
        {            try
            {
                FtpRequest(Path + dirName, WebRequestMethods.Ftp.MakeDirectory, true);
            }            catch (Exception ex)
            {
                Console.WriteLine("创建目录出错:" + ex.Message);
            }
        }        /// <summary>
        /// 删除目录 上一级必须先存在        /// </summary>
        /// <param name="dirName">服务器下的相对路径</param>
        public static void DelDir(string dirName)
        {            try
            {
               FtpRequest(Path + dirName, WebRequestMethods.Ftp.RemoveDirectory,true);
            }            catch (Exception ex)
            {
                Console.WriteLine("删除目录出错:" + ex.Message);
            }
        }        /// <summary>
        ///     从ftp服务器上获得文件夹列表        /// </summary>
        /// <param name="requedstPath">服务器下的相对路径</param>
        /// <returns></returns>
        public static List<string> GetDirctory(string requedstPath)
        {            var strs = new List<string>();            try
            {                var reqFtp = FtpRequest(Path + requedstPath, WebRequestMethods.Ftp.ListDirectoryDetails);
                WebResponse response = reqFtp.GetResponse();                var reader = new StreamReader(response.GetResponseStream()); //中文文件名
                string line = reader.ReadLine();                while (line != null)
                {                    if (line.Contains("<DIR>"))
                    {                        string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim();
                        strs.Add(msg);
                    }
                    line = reader.ReadLine();
                }
                reader.Close();
                response.Close();                return strs;
            }            catch (Exception ex)
            {
                Console.WriteLine("获取目录出错:" + ex.Message);
            }            return strs;
        }        /// <summary>
        ///     从ftp服务器上获得文件列表        /// </summary>
        /// <param name="requedstPath">服务器下的相对路径</param>
        /// <returns></returns>
        public static List<string> GetFile(string requedstPath)
        {            var strs = new List<string>();            try
            {                var reqFtp = FtpRequest(Path + requedstPath, WebRequestMethods.Ftp.ListDirectoryDetails);
                WebResponse response = reqFtp.GetResponse();                var reader = new StreamReader(response.GetResponseStream()); //中文文件名
                string line = reader.ReadLine();                while (line != null)
                {                    if (!line.Contains("<DIR>"))
                    {                        string msg = line.Substring(39).Trim();
                        strs.Add(msg);
                    }
                    line = reader.ReadLine();
                }
                reader.Close();
                response.Close();                return strs;
            }            catch (Exception ex)
            {
                Console.WriteLine("获取文件出错:" + ex.Message);
            }            return strs;
        }
    }
Copier après la connexion

Afficher le code

Principalement en créant un handle FtpRequest Requêtes liées à FTP.

  public static FtpWebRequest FtpRequest(string requstUrl,string method,bool closedResponse=false)
        {            var reqFtp = (FtpWebRequest) WebRequest.Create(new Uri(requstUrl));            //设置连接到FTP的帐号密码
            reqFtp.Credentials = new NetworkCredential(Username, Password);            //设置请求完成后是否保持连接
            reqFtp.KeepAlive = false;            //指定执行命令
            reqFtp.Method = method;            //指定数据传输类型
            reqFtp.UseBinary = true;            if (closedResponse)
            {                var resp=reqFtp.GetResponse();
                resp.Close();
            }            return reqFtp;
        }
Copier après la connexion

En raison de la manière dont les flux de fichiers sont utilisés dans les sites Web MVC.

Télécharger :

   public static Stream Download(string remoteFile)
        {            var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);            var response = (FtpWebResponse)ftpRequest.GetResponse();
            Stream ftpStream = response.GetResponseStream();            return ftpStream;
        }
Copier après la connexion

Appeler :

 public ActionResult DownloadFileFromFtp()
        {             var filepath = "DIAView//simple.png";              var stream = FtpHelper.Download(filepath);            return File(stream, FileHelper.GetContentType(".png"),"test.png");
        }
Copier après la connexion

Télécharger :

  public static bool UpLoad(Stream localFileStream, string remoteFile)
        {            bool result = true;            try
            {                var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.UploadFile);                var ftpStream = ftpRequest.GetRequestStream();                var byteBuffer = new byte[bufferSize];                int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);                try
                {                    while (bytesSent != 0)
                    {
                        ftpStream.Write(byteBuffer, 0, bytesSent);
                        bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
                    }
                }                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    result = false;
                }
                localFileStream.Close();
                ftpStream.Close();
            }            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                result = false;
            }            return result;
        }
Copier après la connexion

Appeler :

      [HttpPost]        public JsonResult UploadFile(HttpPostedFileBase fileData)
        {           if (fileData != null)
            {               string fileName = Path.GetFileName(fileData.FileName);// 原始文件名称
                string saveName = Encrypt.GenerateOrderNumber() +"_"+fileName;  
                FtpHelper.UpLoad(fileData.InputStream, "DIAView" + "/" + saveName);                return Json(new { Success = true, FileName = fileName, SaveName = saveName}, JsonRequestBehavior.AllowGet);
            }            return Json(new { Success = false, Message = "请选择要上传的文件!" }, JsonRequestBehavior.AllowGet);
        }
Copier après la connexion

FTP peut également définir différents répertoires pour différents utilisateurs.Je pense qu'après avoir lu le cas dans cet article, vous maîtrisez la méthode. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de PHP !

Lecture recommandée :

Comment créer un serveur avec nodejs


Comment déployer Node.JS sur Heroku

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal