Maison  >  Article  >  développement back-end  >  Comment ajouter la prise en charge du téléchargement FTP et de la prévisualisation dans le module de gestion des pièces jointes ?

Comment ajouter la prise en charge du téléchargement FTP et de la prévisualisation dans le module de gestion des pièces jointes ?

零下一度
零下一度original
2017-06-23 16:20:572048parcourir

Dans les modules de gestion des pièces jointes introduits précédemment, « Winform Development Framework - Universal Attachment Management Module » et « Winform Development Framework - Attachment Management Application », les fonctions de gestion des pièces jointes sont introduites via le traitement des enregistrements de base de données et la gestion des fichiers, Il réalise la gestion intégrée des fichiers joints et des enregistrements, qui peuvent être utilisés dans la version autonome du framework WInform ou dans le framework de développement hybride distribué. Avec l'enrichissement de certains scénarios de développement, nous devons télécharger des fichiers via FTP, donc. pour Ce module de gestion des pièces jointes est étendu pour répondre aux besoins plus pratiques du projet.

1. Idées d'implémentation pour le téléchargement FTP et l'aperçu des fichiers HTTP

La couche inférieure de gestion des pièces jointes que nous envisageons doit être réutilisée dans Winform, Web et d'autres projets de développement, donc la conception de la couche inférieure doit être réutilisée. à considérer Le traitement correspondant peut être intégré ultérieurement à l'aide du contrôle d'édition HTML de WInform ou du contrôle d'édition HTML du Web. Les pièces jointes sont unifiées et implémentées dans un seul composant.

Avec l'aide du téléchargement de fichiers FTP, notre version autonome ou le programme d'interface Winform basé sur LAN peut également créer un serveur FTP séparé pour réaliser le partage de fichiers dans le cadre de développement hybride distribué, pour le téléchargement de fichiers, vous pouvez choisir l'écriture d'un système de fichiers basé sur un service et vous pouvez également télécharger via FTP.

Télécharger des fichiers basés sur la méthode FTP du framework hybride La relation logique est la suivante.

Une fois le fichier téléchargé via FTP vers le système de fichiers, nous construisons un service HTTP dans le système de fichiers, afin que l'adresse HTTP correspondante puisse être utilisée pour télécharger le fichier et Afficher les images et autres opérations (peuvent être implémentées dans l'éditeur HTML).

2. Présentation des composants FTP pour implémenter le téléchargement de fichiers

Utiliser FTP pour télécharger, bien qu'il existe une classe FTPHelper dans votre propre bibliothèque de classes publique qui peut être utilisée, mais relativement parlant, je Nous sommes plus disposés à introduire des composants open source FTP plus complets et plus puissants pour le traitement associé. Ici, nous utilisons le composant FluentFTP (adresse GitHub : ), qui est un composant FTP largement utilisé et puissant.

FluentFTP est une bibliothèque de classes FTP basée sur .Net développée par des étrangers qui prend en charge FTP et FTPS. FluentFTP est un client FTP entièrement géré conçu pour être facile à utiliser et à développer. Il prend en charge la liste des fichiers et des répertoires, le téléchargement et le téléchargement de fichiers et les connexions SSL/TLS. Il peut se connecter à Unix et Windows IIS pour établir des serveurs FTP. Ce projet est entièrement développé en C# managé.

Collez ici le code d'utilisation de ce composant afin d'en avoir une compréhension intuitive.

// create an FTP clientFtpClient client = new FtpClient("123.123.123.123");// if you don't specify login credentials, we use the "anonymous" user accountclient.Credentials = new NetworkCredential("david", "pass123");// begin connecting to the serverclient.Connect();// get a list of files and directories in the "/htdocs" folderforeach (FtpListItem item in client.GetListing("/htdocs")) {    // if this is a fileif (item.Type == FtpFileSystemObjectType.File){        // get the file sizelong size = client.GetFileSize(item.FullName);
        
    }    // get modified date/time of the file or folderDateTime time = client.GetModifiedTime(item.FullName);    // calculate a hash for the file on the server side (default algorithm)FtpHash hash = client.GetHash(item.FullName);
    
}// upload a fileclient.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt");// rename the uploaded fileclient.Rename("/htdocs/big.txt", "/htdocs/big2.txt");// download the file againclient.DownloadFile(@"C:\MyVideo_2.mp4", "/htdocs/big2.txt");// delete the fileclient.DeleteFile("/htdocs/big2.txt");// delete a folder recursivelyclient.DeleteDirectory("/htdocs/extras/");// check if a file existsif (client.FileExists("/htdocs/big2.txt")){ }// check if a folder existsif (client.DirectoryExists("/htdocs/extras/")){ }// upload a file and retry 3 times before giving upclient.RetryAttempts = 3;
client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt", FtpExists.Overwrite, false, FtpVerify.Retry);// disconnect! good bye!client.Disconnect();

Avec cette compréhension, dans les programmes Winform ordinaires ou les programmes-cadres hybrides, nous pouvons les charger dans le code en spécifiant les informations liées au FTP via les informations de configuration, effectuer une connexion FTP, télécharger des fichiers , téléchargement et autres opérations.

3. Implémentation du module de gestion des pièces jointes

Avec l'aide des idées et des composants ci-dessus, nous pouvons implémenter FTP en effectuant des mises à niveau pertinentes sur le module de gestion des pièces jointes d'origine. Le mode est géré.

Tout d'abord, pour plus de commodité, nous définissons d'abord une classe d'entité de configuration pour obtenir le serveur FTP, le nom d'utilisateur, le mot de passe et d'autres paramètres, comme indiqué ci-dessous.

    /// <summary>/// FTP配置信息/// </summary>    [DataContract]
    [Serializable]public class FTPInfo
    {/// <summary>/// 默认构造函数/// </summary>public FTPInfo()
        {

        }/// <summary>/// 参数化构造函数/// </summary>/// <param name="server"></param>/// <param name="user"></param>/// <param name="password"></param>public FTPInfo(string server, string user, string password, string baseUrl)
        {this.Server = server;this.User = user;this.Password = password;this.BaseUrl = baseUrl;
        }/// <summary>/// FTP服务地址/// </summary>        [DataMember]public string Server { get; set; }/// <summary>/// FTP用户名/// </summary>        [DataMember]public string User { get; set; }/// <summary>/// FTP密码/// </summary>        [DataMember]public string Password { get; set; }/// <summary>/// FTP的基础路径,如可以指定为IIS的路径::8000 ,方便下载打开/// </summary>        [DataMember]public string BaseUrl { get; set; }
    }

Définissez une fonction spécifiquement utilisée pour extraire les paramètres FTP pertinents dans le fichier de configuration, comme indiqué ci-dessous.

        /// <summary>/// 获取配置的FTP配置参数/// </summary>/// <returns></returns>private FTPInfo GetFTPConfig()
        {var ftp_server = config.AppConfigGet("ftp_server");var ftp_user = config.AppConfigGet("ftp_user");var ftp_pass = config.AppConfigGet("ftp_password");var ftp_baseurl = config.AppConfigGet("ftp_baseurl");return new FTPInfo(ftp_server, ftp_user, ftp_pass, ftp_baseurl);
        }

où notre fichier de configuration se trouve comme indiqué ci-dessous.

Le code du composant utilisant FluentFTP est le suivant.

//使用FluentFTP操作FTP文件FtpClient client = new FtpClient(ftpInfo.Server, ftpInfo.User, ftpInfo.Password);

Appelez ensuite le composant FTP pour juger du répertoire, sinon, créez-en simplement un.

//确定日期时间目录(格式:yyyy-MM),不存在则创建string savePath = string.Format("/{0}-{1:D2}/{2}", DateTime.Now.Year, DateTime.Now.Month, category);bool isExistDir = client.DirectoryExists(savePath);if(!isExistDir)
{
    client.CreateDirectory(savePath);
}

Enfin, utilisez le composant pour télécharger le fichier ici. Étant donné que le tableau d'octets est stocké dans la classe d'entité FileUploadInfo précédente, le composant FTP est également utilisé pour. téléchargez directement le tableau d'octets.

//使用FTP上传文件//避免文件重复,使用GUID命名var ext = FileUtil.GetExtension(info.FileName);var newFileName = string.Format("{0}{1}", Guid.NewGuid().ToString(), ext);//FileUtil.GetFileName(file);savePath = savePath.UriCombine(newFileName);bool uploaded = client.Upload(info.FileData, savePath, FtpExists.Overwrite, true);

Une fois le fichier téléchargé sur le serveur de fichiers, il ne reste plus qu'à stocker les informations pertinentes dans la table de données du module de gestion des pièces jointes. De cette manière, vous pouvez utiliser directement les informations de la base de données lors de son utilisation. Si vous avez besoin d'afficher des images ou après avoir téléchargé le fichier, collez simplement les adresses HTTP pertinentes. Jetons un coup d'œil à la capture d'écran de l'enregistrement de la base de données correspondante, comme indiqué ci-dessous.

Avec ces informations de base, nous pouvons également transformer le contrôle d'édition HTML Winform que j'ai présenté précédemment : ZetaHtmlEditControl (partager un contrôle d'édition HTML Zeta HTML Edit en Winform Control (version chinoise avec code source), j'ai traduit tous les menus anglais, barres d'outils, boîtes de dialogue, contenu d'invite et autres ressources de ce contrôle en chinois, et ajouté les fonctions d'insertion d'images et d'impression dans la barre d'outils, et l'interface est la suivante.

Par défaut, la façon dont nous ajoutons des images est définitivement basée sur les fichiers locaux, mais après l'avoir modifié pour utiliser FTP pour télécharger des fichiers, nous avons obtenu HTTP sur l'adresse de contrôle ; vous pouvez prévisualiser et afficher le fichier image.

L'adresse d'image construite par cette méthode est une adresse URL standard et peut être visualisée à divers endroits, comme indiqué dans l'interface suivante.

Il s'agit du contrôle ZetaHtmlEditControl. Il intègre le module de gestion des pièces jointes que nous avons complété précédemment en mode de téléchargement FTP pour réaliser la fonction d'édition de ce contenu HTML en ligne. être adapté à Il est affiché sur l'éditeur HTML sous l'interface web.

Ce qui précède sont les composants du projet que j'ai construits pour l'ensemble du framework de développement WInform. J'ai ajouté la méthode de téléchargement FTP et amélioré les exigences de scène correspondantes. J'ai implémenté la fonction d'édition HTML en ligne sur le contrôle ZetaHtmlEditControl. des idées de développement vous seront utiles.

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!

Déclaration:
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