2009-08-20 2 views
2

Dans le cadre d'un projet ASP classique, l'utilisateur doit pouvoir télécharger un fichier extrait dynamiquement d'une archive zip et envoyé via Response.BinaryWrite() par il suffit d'appeler "document.asp? id = [un identifiant ici]".Envoyer un fichier à l'aide de Response.BinaryWrite() et le supprimer par la suite

Extraire et envoyer n'est pas le problème, mais j'ai besoin de supprimer le fichier extrait après le téléchargement terminé. Je n'ai jamais fait d'ASP ou VBA avant et je suppose que c'est pourquoi je suis resté ici.

J'ai essayé de supprimer le fichier juste après Response.WriteBinary() en utilisant FileSystemObject.DeleteFile() mais cela entraîne une erreur 404 côté client.

Comment puis-je attendre la fin du téléchargement, puis effectuer des actions supplémentaires?

Edit: Voici comment mon code ressemble à:

'Unzip a specified file from an archive and put it's path in *document* 

set stream = Server.CreateObject("ADODB.Stream") 
stream.Open 
stream.Type = 1 ' binary 
stream.LoadFromFile(document) 

Response.BinaryWrite(stream.Read) 

'Here I want to delete the *document* 
+0

Que transmettez-vous à WriteBinary? Pouvez-vous montrer comme un code réel de ce que vous faites? – AnthonyWJones

Répondre

0

J'ai trouvé une solution: Les fichiers extraits sont sauvegardés dans un répertoire spécial et chaque fois qu'un utilisateur exécute le document.asp, il vérifie ce répertoire pour les fichiers de plus d'une heure et les supprime.

Je pense que c'est la façon la plus simple de gérer, mais je préférerais d'ailleurs une solution où le document est supprimé après le téléchargement.

0

est-il pas possible de diffuser le fichier en mémoire, puis binaire écrire le flux dans le navigateur, ainsi que le fichier est jamais créé sur le serveur et il n'est pas nécessaire de le supprimer.

+0

Comme je l'ai dit, le fichier est décompressé à partir d'une archive et je ne pense pas qu'il soit possible de l'extraire directement dans un flux. –

+0

Bien sûr, je suppose que cela dépend du composant que vous utilisez. Dans ce cas, si vous devez enregistrer sur un disque, par exemple dans un dossier "temp", vous pouvez créer un service Windows qui nettoie les fichiers d'un certain âge. –

+0

Ce n'est pas une option pour moi. Le site Web ASP n'est qu'une (très) petite partie d'un gros projet et je ne peux pas m'attendre à ce que le client installe un service Windows pour une fonctionnalité qu'il n'utilisera probablement jamais. –

1

Je suppose que le point que vous appelez la méthode DeleteFile le fichier que vous essayez de supprimer est actuellement verrouillé par quelque chose d'autre, la question est quoi?

Essayez d'inclure: -

stream.Close() 

après votre BinaryWrite. Assurez-vous également que vous avez fait une chose similaire au composant que vous avez utilisé pour extraire le fichier. Si le composant n'offre aucune méthode "close" évidente, il essaie d'assigner Nothing aux variables qui le référencent.

+0

J'ai essayé stream.Close(), mais cela n'a eu aucun effet. J'ai eu la même erreur 404 comme avant et je suis sûr que cela n'a rien à voir avec le composant zip, parce que c'est un programme C# qui est appelé via WScript.Shell.Run(). –

Questions connexes