Python django:是否有直接从内存提供文件的方法

Python django:是否有直接从内存提供文件的方法,python,django,Python,Django,因此,我让用户从django服务器请求他们的文件,其中一些进程在请求的文件上进行。目前,我正在将文件写入磁盘并从那里提供服务 是否有任何方法可以从内存直接将文件提供给用户,以提高效率和性能(使用x-sendfile) 以下是我目前的看法: def ServeSegment(request, segmentID): segments =[] obj = MainFile.objects.filter(owner=request.user) file_name = MainF

因此,我让用户从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个段就足以构建数据。因此,在上面的视图中,我正在从存储服务器检索段并将其组合


我的问题是:如何直接提供docfile而不保存它。还有吗?

您不能使用X-Sendfile从内存提供服务,因为Apache运行在不同的进程中,甚至在完全不同的机器上

然而,在这种情况下,使用sendfile并不能真正提高效率。因为正如您所说,该文件已经在内存中,所以您应该直接从那里提供它,而不必通过Apache:只需在响应中返回它即可

docfile = instance.decoder(segments)
response = HttpResponse()
response.write(docfile)
response['Content-Disposition'] = 'attachment; filename={0}'.format(file_name)
return response

您不能使用X-Sendfile从内存提供服务,因为Apache运行在不同的进程中,即使在完全独立的机器上也是如此

然而,在这种情况下,使用sendfile并不能真正提高效率。因为正如您所说,该文件已经在内存中,所以您应该直接从那里提供它,而不必通过Apache:只需在响应中返回它即可

docfile = instance.decoder(segments)
response = HttpResponse()
response.write(docfile)
response['Content-Disposition'] = 'attachment; filename={0}'.format(file_name)
return response

我想答案可以在这里找到:我想答案可以在这里找到:我不知道我可以直接写信回复,谢谢你教我。这种方法适合处理大量请求文件的并发连接吗?我不知道我可以直接写响应,谢谢你教我这个。这种方法适合处理大量请求文件的并发连接吗?