我需要一些在内存和临时文件中使用文件操作的示例。
我搜索了很多很好的示例/教程,发现只有基本的读/写/附加操作。
我需要了解如何在 Django 中读取在保存(发布)完成之前上传的文件(图像)。
因为Django是Python,所以我认为先了解Python比较好。
我检查了 Django 文档/示例,但不是很清楚,所以我需要首先了解 Python,然后了解 Django 中的操作是如何工作的,而不仅仅是复制和粘贴。
我知道如何使用 ImageFields,上传默认操作,我只对使用“内存和临时文件”感兴趣。
我想将其与裁剪功能结合使用。因此,用户可以上传 1、2、3...图像,并使用 javascript 裁剪脚本,我在隐藏字段中获取坐标。在 javascript 模拟裁剪后,我向用户显示裁剪的缩略图,比例看起来如何
用户可以改变主意,并可以在保存之前编辑/更新或删除文件。
现在,根据文件大小,它可以保存在内存中或写入。
当文件上传时,Django 将执行以下两件事之一:如果文件很小(我上次检查时 FILE_UPLOAD_HANDLERS环境。因此,您的 Web 服务器和 Django 负责实际的上传和存储,但您的工作是在请求结束之前处理文件,否则文件将被删除。
上传的文件可以通过request.FILES
财产。每个键输入FILES
将与您输入的文件名相匹配<form>
。该值是一个UploadedFile
对象,它是一个可用于读取文件数据的流。
例如,假设您有一个<input name="img" type="file" />
并且您想检测图像是否全白。您不需要为此存储文件,只需将其加载到内存中,对其进行处理以获得结果,然后将其丢弃。
from PIL import Image
def some_view(request):
if request.method == 'POST':
img_file = request.FILES['img']
if img_file.size > 2000000:
return HttpResponseBadRequest()
img = Image.open(img_file)
# analyze the image...
另一种可能性是有人上传了一个非常大的备份文件(假设 2 GB),您需要将其存储在某个地方。这实际上是同一件事,只不过我们将文件分块读入内存,然后将每个块写入磁盘的其他位置,以便在请求完成后保存它。
def some_view(request):
if request.method == 'POST':
backup_file = request.FILES['backup_file']
with open('some/file/name.bak', 'wb+') as destination:
for chunk in backup_file.chunks():
destination.write(chunk)
# file is saved
当请求结束后,上传的文件存储在some/file/name.bak
.
无论是在内存中还是临时文件中通常并不重要,因为接口是相同的。您可以读取临时文件,就像读取内存文件一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)