因此,对于创建文件,我使用以下内容:
fileHandle = open('fileName', 'w')
Run Code Online (Sandbox Code Playgroud)
然后将内容写入文件,关闭文件.在下一步中,我处理文件.在程序结束时,我最终得到了一个我需要删除的"物理文件".
有没有写一个"虚拟"的文件,它的行为完全像一个"物理"一个(允许其操作方法相同),但在Python中运行结束时不存在的方式吗?
我有一个远程存储项目,当用户请求他的文件时,django 服务器在本地检索和存储文件(用于某些处理)作为临时文件,然后使用 mod x-sendfile 将其提供给用户。我当然希望在向用户提供临时文件后将其删除。
文档指出,NamedTemporaryFile如果设置为 delete 参数,则False在所有引用都消失后会导致删除文件。但是当为用户提供服务时tempfile,它不会被删除。如果我在下载时设置 delete=True,我会收到“/ServeSegment/Test.jpg/在此服务器上找不到请求的 URL ”。
这是列出用户文件的视图:
def file_profile(request):
obj = MainFile.objects.filter(owner=request.user)
context = {'title': 'welcome',
'obj': obj
}
return render(request, 'ServeSegments.html', context=context)
Run Code Online (Sandbox Code Playgroud)
这是检索、临时存储和提供请求文件的视图:
def ServeSegment(request, segmentID):
if request.method == 'GET':
url = 'http://192.168.43.7:8000/foo/'+str(segmentID)
r = requests.get(url, stream=True)
if r.status_code == 200:
with tempfile.NamedTemporaryFile(dir=
'/tmp/Files', mode='w+b') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
response = HttpResponse()
response['Content-Disposition'] = 'attachment; segmentID={0}'.format(f.name)
response['X-Sendfile'] = "{0}".format(f.name)
return response
else:
return …Run Code Online (Sandbox Code Playgroud)