HTTP File Server (HFS) est une solution légère permettant de déployer rapidement un serveur de fichiers accessible via le protocole HTTP. Pour interagir de manière programmatique avec cette infrastructure depuis une application .NET, la classe HttpClient offre une approche robuste. Ce guide détaille l'implémentation des opérations d'upload et de suppression de fichiers en exploitant les requêtes HTTP attendues par HFS.
Upload de fichier (AddFile)
L'ajout d'un fichier sur HFS nécessite l'envoi d'une requête POST avec un corps de type multipart/form-data. Plutôt que de consturire manuellement les octets de délimitation (boundary), l'API .NET moderne propose la classe MultipartFormDataContent, qui simplifie grandement la sérialisation du flux.
Contexte d'exécution
// Paramètres de configuration
var serverEndpoint = new Uri("http://127.0.0.1:8080/dossier_virtuel/");
var targetDocumentName = "rapport_financier_2023.pdf";
var localSourcePath = @"C:\temp\documents\rapport_financier_2023.pdf";
// Appel de la méthode asynchrone
await UploadDocumentToHfsAsync(serverEndpoint, targetDocumentName, localSourcePath);
Implémentation de la méthode
public async Task UploadDocumentToHfsAsync(Uri endpoint, string targetName, string sourcePath)
{
#region Validation des contrats
if (endpoint == null) throw new ArgumentNullException(nameof(endpoint));
if (string.IsNullOrWhiteSpace(targetName)) throw new ArgumentException("Le nom du fichier cible est requis.", nameof(targetName));
if (!File.Exists(sourcePath)) throw new FileNotFoundException("Le fichier source est introuvable.", sourcePath);
#endregion
using var httpClient = new HttpClient();
using var fileDataStream = File.OpenRead(sourcePath);
// Construction du contenu multipart
using var multipartContent = new MultipartFormDataContent();
var streamPayload = new StreamContent(fileDataStream);
streamPayload.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
// Ajout du flux au formulaire avec le nom de champ attendu par HFS
multipartContent.Add(streamPayload, "file", targetName);
// Envoi de la requête POST
var httpResponse = await httpClient.PostAsync(endpoint, multipartContent);
// Validation du statut HTTP (lève une exception si le code n'est pas 2xx)
httpResponse.EnsureSuccessStatusCode();
}
Suppression de fichier (RemoveFile)
La suppression d'un document sur HFS s'effectue également via une requête POST, mais en utilisant cette fois un encodage de type application/x-www-form-urlencoded. Le serveur attend des paires clé-valeur spécifiques pour identifier l'action et la cible.
Contexte d'exécution
// Paramètres de configuration
var serverEndpoint = new Uri("http://127.0.0.1:8080/dossier_virtuel/");
var targetDocumentName = "rapport_financier_2023.pdf";
// Appel de la méthode asynchrone
await DeleteDocumentFromHfsAsync(serverEndpoint, targetDocumentName);
Implémentation de la méthode
public async Task DeleteDocumentFromHfsAsync(Uri endpoint, string targetName)
{
#region Validation des contrats
if (endpoint == null) throw new ArgumentNullException(nameof(endpoint));
if (string.IsNullOrWhiteSpace(targetName)) throw new ArgumentException("Le nom du fichier cible est requis.", nameof(targetName));
#endregion
using var httpClient = new HttpClient();
// Préparation des données du formulaire
var formPayload = new Dictionary<string string="">
{
{ "action", "delete" },
{ "selection", targetName }
};
using var urlEncodedContent = new FormUrlEncodedContent(formPayload);
// Envoi de la requête POST
var httpResponse = await httpClient.PostAsync(endpoint, urlEncodedContent);
// Validation du statut HTTP
httpResponse.EnsureSuccessStatusCode();
}
</string>