Итак, у меня есть пользователи, запрашивающие их файлы с сервера django, внутри которого происходят некоторые процессы в запрошенном файле. В настоящее время я пишу файл на диск и обслуживаю его оттуда.django: Есть ли способ подавать файл непосредственно из памяти
Есть ли способ передать файл непосредственно пользователю из памяти для повышения эффективности и производительности (используя x-sendfile)?
Вот мой текущий вид:
def ServeSegment(request, segmentID):
segments =[]
obj = MainFile.objects.filter(owner=request.user)
file_name = MainFile.objects.get(file_id=segmentID).file_name
file_suffix = file_name = MainFile.objects.get(file_id=segmentID).file_suffix
if request.method == 'GET':
hosts = settings.HOSTS
for i in hosts:
try:
url = 'http://' + i + ':8000/foo/'+str(segmentID)
r = requests.get(url, timeout=1, stream=True)
if r.status_code == 200:
segments.append(r.content)
except:
continue
instance = SeIDA(filename='test', x=settings.M, y=settings.N)
docfile = instance.decoder(segments)
with open('/tmp/Files/'+file_name, 'wb') as f:
f.write(docfile)
response = HttpResponse()
response['Content-Disposition'] = 'attachment; filename={0}'.format(file_name)
response['X-Sendfile'] = "/tmp/Files/{0}".format(file_name)
return response
Примечание: используется модуль Seida, кодирует данные в N сегментов таким образом, что сегменты M является достаточно, чтобы построить данные. Таким образом, в представлении выше я извлекаю сегменты с серверов хранения и объединяя их.
Мой вопрос: Как я могу напрямую обслуживать файл doc без его сохранения. Там в любом случае?
Я думаю, что ответ может быть найден здесь: http://stackoverflow.com/a/909088/2372812 –