Une application interroge régulièrement un répertoire des fichiers csv d'entrée qui arrivent par FTP. Un serveur FTP (actuellement, Filezilla Server) est exécuté sur cet ordinateur.
Le problème est que si un fichier est en cours de téléchargement lorsque l'application décide de sonder l'emplacement, le fichier est verrouillé et toutes sortes d'erreurs inesthétiques sont générées sur l'application, ce qui nuit à l'expérience utilisateur.
Maintenant, en supposant que je ne puisse pas modifier l'application pour attendre, y a-t-il quelque chose à faire à ce sujet? Par exemple, le serveur déplace ou renomme automatiquement le fichier une fois le téléchargement terminé? Ou attendez-vous que le téléchargement soit terminé avant de sauvegarder le fichier? Ou existe-t-il d'autres serveurs offrant des solutions telles que celle-ci?
la source
DELE
,RNFR
,RNTO
. Mais cela provient du côté client; vous cherchez une solution qui fonctionne sur le serveur. C'est pourquoi mon commentaire n'est pas une réponse. Cela sent le problème XY . C'est bien que vous ayez décrit une image plus large. Peut-être envisagerez-vous cette approche côté client.filename.tmp
le processus ne se touchera pas, puis une fois le téléchargement terminé, exécutez une commande rename / mv pour renommer le fichier téléchargé à 100% en son nom complet. . En outre, envisagez de télécharger vers un sous-dossier / tmp puis, une fois que vous avez été chargé, accédez au répertoire de téléchargement racine ou à un autre emplacement. Le téléchargement sur le réseau étendu lent prend généralement le plus de temps. Par conséquent, la commande de changement de nom ou de déplacement locale sera beaucoup plus rapide et empêchera ce problème.Réponses:
Je recommanderais l'approche où votre application n'interroge pas l'emplacement utilisé par un autre processus (serveur FTP dans ce cas) pour écrire. Au lieu de cela, définissez le processus sur rnfr / rnto (opération atomique) des fichiers après leur arrivée aux emplacements interrogés par votre application ... Vous devez essayer de prendre readlock sur le fichier et, en cas d'échec, ignorez-le jusqu'à la prochaine tentative. Une autre approche consiste à utiliser un fichier marqueur qui arrivera en dernier dans le lot de fichiers et signale à votre application d'interrogation qu'il peut commencer à traiter les fichiers CSV.
la source