use*_*631 2 python django django-file-upload
我需要一些在内存和临时文件中使用文件操作的示例。
我在一个很好的示例/ tutorial中进行了大量搜索,发现只是基本的读/写/追加操作。
我需要了解如何在Django中读取保存(发布)完成之前上传的文件(图像)。
因为Django是Python,所以我认为最好先了解python。
我检查了有关Django的文档/示例,但是并不太清楚,因此我需要首先在phyton中而不是在Django中了解操作的工作方式,而不仅仅是复制和粘贴。
我知道如何使用ImageFields,上载默认操作,我只对使用“内存和临时文件”感兴趣。
我想结合使用此功能和裁剪功能。因此用户可以上传1,2,3 ..图片,并使用javascript裁剪脚本在隐藏字段中获取坐标。在用javascript模拟裁剪后,我向用户显示了裁剪的缩略图,比例看起来如何
用户可以改变主意,可以在保存之前编辑/更新或删除文件。
现在,根据文件大小,它可以保留在内存中或写入。
上载文件时,Django将执行以下两项操作之一:如果文件较小(将其存储为小于2 MB,则存储在内存中);如果文件较大,则将其作为临时文件存储在磁盘上。可通过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...
Run Code Online (Sandbox Code Playgroud)
另一种可能性是有人上传的备份文件很大(假设为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
Run Code Online (Sandbox Code Playgroud)
请求结束后,上传的文件存储在some/file/name.bak。
通常是不重要的,因为它是在内存中还是临时文件中,因为接口是相同的。您可以读取一个临时文件,就像您可以读取一个内存文件一样。
| 归档时间: |
|
| 查看次数: |
5627 次 |
| 最近记录: |