django скачать файл с сервера на компьютер пользователя или читать онлайн - PullRequest
1 голос
/ 22 июня 2010

Я загружаю некоторые документы .doc и .txt на свой сервер, и я хотел бы иметь два варианта: - пользователь сможет загрузить документ -пользователь, чтобы иметь возможность читать его онлайн Я прочитал некоторый код для функции загрузки, но, похоже, он не работает.

мой код:

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()

какая-либо подсказка? спасибо!

Ответы [ 2 ]

12 голосов
/ 11 декабря 2012

Вы можете открыть объект File, чтобы прочитать фактический файл, а затем начать загрузку файла, как этот код:

        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: где файл расположен на сервере.f = open(path_to_file, 'r') .. чтобы прочитать файл

остальное - загрузить файл.

4 голосов
/ 23 июня 2010

Должен ли ответ ['X-Sendfile'] указывать на файл? Похоже, он указывает только на «/ root /», который, я думаю, просто каталог. Может быть, это должно выглядеть примерно так:

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 возвращает местоположение загрузки в файловой системе (например: /path/to/where/handle_uploaded_files/saves/files/the_file.doc)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...