2010-08-16 7 views
1

Dans certaines situations, les utilisateurs peuvent envoyer des fichiers temporaires à mon serveur. Je voudrais garder une trace de ces fichiers temporaires (car ils sont utilisés plus tard et je voudrais savoir, quand je peux les supprimer - ou quand ils ne sont pas utilisés et peuvent être collectés). Quel genre de modèle dois-je utiliser pour cela? Je vais envoyer ces fichiers en utilisant AJAX (et iframe).django: modèle de conservation des fichiers temporaires

EDIT

Si j'utilise dans le modèle FileField, comment dois-je gérer le téléchargement de fichiers? Pourriez-vous montrer un exemple d'extrait, comment ma fonction devrait mettre le fichier de request.FILES à FielField.

+0

qu'est-ce qui ne va pas avec un http://docs.djangoproject.com régulière/fr/dev/ref/models/fields/#filefield ? –

+0

J'ai ajouté une petite mise à jour. – gruszczy

Répondre

3

La façon dont vous stockez les fichiers est indépendante du fait qu'ils proviennent ou non d'AJAX. Votre vue devra toujours traiter les données de formulaire en plusieurs parties et les stocker dans votre système de fichiers de base de données et de serveur, comme tout autre fichier téléchargé dans Django.

En ce qui concerne le modèle, que diriez-vous de quelque chose comme ceci?

class TemporaryFileWrapper(models.Model): 
    """ 
    Holds an arbitrary file and notes when it was last accessed 
    """ 
    uploaded_file = models.FileField(upload_to="/foo/bar/baz/") 
    uploading_user = models.ForeignKey(User) 
    uploaded = models.DateTimeField(blank=True, null=True, auto_now_add=True)   
    last_accessed = models.DateTimeField(blank=True, null=True, 
             auto_now_add=False, auto_now=False) 


    def read_file(record_read=True): 
     #...some code here to read the uploaded_file 
     if record_read: 
      self.last_accessed = datetime.datetime.now() 
      self.save() 

Pour télécharger des fichiers de base de manutention see the official documentation, mais où l'exemple a la méthode handle_uploaded_file(), vous avez besoin du code qui crée un objet TemporaryFileWrapper, quelque chose comme celui-ci, en fonction de vos besoins:

.... 
form = ProviderSelfEditForm(request.POST, request.FILES) #this is where you bind files and postdata to the form from the HTTP request 
if form.is_valid(): 
    temp_file_wrapper = TemporaryFileWrapper() 
    temp_file_wrapper.uploaded_file = 
         form.cleaned_data['name_of_file_field_in_your_form'] 
    temp_file_wrapper.uploading_user = request.user #needs an authenticated user 
    temp_file_wrapper.save() 

    return HttpResponseRedirect('/success/url/') 
+0

Pourriez-vous également me suggérer quelque chose sur la question dans la mise à jour? – gruszczy

+0

Oui, c'est le point - je n'ai pas le formulaire. Je viens d'obtenir 'UploadedFile' de' request.FILES'. Puis-je en quelque sorte assigner un fichier à un objet FileField? – gruszczy

+0

Faire un formulaire simple pour lier les données et y accéder comme je l'ai montré OU lire le tutoriel que j'ai lié (en particulier, http://docs.djangoproject.com/en/dev/topics/http/file -uploads /? from = olddocs # handling-uploaded-files) pour gérer un fichier qui n'est pas lié à un formulaire à la place. –

Questions connexes