2010-06-22 5 views
0

Je télécharge des documents .doc et .txt sur mon serveur, et j'aimerais avoir deux options: -l'utilisateur pour pouvoir télécharger le document -l'utilisateur pour être en mesure de le lire en ligne J'ai lu du code pour la fonction de téléchargement, mais cela ne semble pas fonctionner.django télécharger le fichier du serveur à la machine de l'utilisateur, ou lire en ligne

mon code:

def download_course(request, id): 
    course = Courses.objects.get(pk = id) 
    response = HttpResponse(mimetype='application/force-download') 
    response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) 
    response['X-Sendfile'] = smart_str(/root/) 
    return response 

def save_course(request, classname): 
    classroom = Classroom.objects.get(classname = classname) 
    if request.method == 'POST': 
     form = CoursesForm(request.POST, request.FILES) 
     if form.is_valid(): 
      handle_uploaded_file(request.FILES['course']) 
      new_obj = form.save(commit=False) 
      new_obj.creator = request.user 
      new_obj.classroom = classroom 
      new_obj.save() 
      return HttpResponseRedirect('.')  
    else: 
      form = CoursesForm()  
    return render_to_response('courses/new_course.html', { 
      'form': form, 
      }, 
      context_instance=RequestContext(request)) 


def handle_uploaded_file(f): 
    destination = open('root', 'wb+') 
    for chunk in f.chunks(): 
     destination.write(chunk) 

    destination.close() 

aucun indice? merci!

+1

Vous devez définir 'nom_fichier quelque part! Est-il stocké dans le modèle 'Courses'? (Je suppose que c'est censé être Cours.course)? –

Répondre

4

La réponse ['X-Sendfile'] doit-elle pointer vers le fichier? On dirait qu'il pointe seulement sur '/ root /', ce que je suppose être juste un répertoire. Peut-être qu'il devrait ressembler à ceci:

def download_course(request, id): 
    course = Courses.objects.get(pk = id) 
    path_to_file = get_path_to_course_download(course) 

    response = HttpResponse(mimetype='application/force-download') 
    response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) 
    response['X-Sendfile'] = smart_str(path_to_file) 
    return response 

get_path_to_course_download retourne l'emplacement du téléchargement dans le système de fichiers (ex: /path/to/where/handle_uploaded_files/saves/files/the_file.doc)

+0

'a un argument inattendu mimetype' – fanny

11

Vous pouvez ouvrir un objet de fichier pour lire le fichier réel, puis commencer à télécharger le fichier comme ce code:

 path_to_file = os.path.realpath("random.xls") 
     f = open(path_to_file, 'r') 
     myfile = File(f) 
     response = HttpResponse(myfile, content_type='application/vnd.ms-excel') 
     response['Content-Disposition'] = 'attachment; filename=' + name 
     return response 

path_to_file: est l'endroit où se trouve le fichier sur le serveur. f = open(path_to_file, 'r') .. pour lire le fichier

le reste est de télécharger le fichier.

+4

class est 'from django.core.files import File' –

Questions connexes