Форум сайта python.su
Мне нужно, чтобы при нажатии на ссылки, пользователь мог загрузить файл.
Когда я писала функцию для загрузки файла, то неважно было в какой он кодировке, он с помощью этого кода записывался таким, какой есть и нормально отображалось содержимое:
f = open("%s/doc_files/doc%s/%s" % (settings.MEDIA_ROOT, idDoc, hash + request.FILES[i].name), "wb")
for chunk in request.FILES[i].chunks():
f.write(chunk)
f.close()
from django.core.files import File
f = open("%s/doc_files/doc%d/%s" % (settings.MEDIA_ROOT, d.nomer, d.value), "r")
myfile = File(f)
a = myfile.read()
myfile.close()
response = HttpResponse(a, mimetype='application/vnd.ms-word')
response['Content-Disposition'] = 'attachment; filename=1.doc'
return response
Отредактировано (Ноя. 26, 2010 15:03:53)
Офлайн
LudchikLukа почему не сделать просто ссылку на файл?
Тоесть я так поняла, что нада считать файл, а потом вернуть.
Офлайн
действительно зачем возвращать файл?
формируйте на сервере нужный вам url
возвращайте html или JSON, а потом если нужно его сразу отобразить на клиенте вызывайте скрипт:
document.location.href = url
Офлайн
Сейчас не проверю, но по памяти вроде можно возвращать HttpResponse(filelike_object), т.е.:
f = open('filename', 'rb')
return HttpResponse(f)
Офлайн
если файл большой, имеется вероятность таким образом вырулить ошибку 503 (на некоторых хостингах), но вообще я такого не встречал сильно ))
Офлайн