Python 和 Django - 如何在内存和临时文件中使用

2023-11-23

我需要一些在内存和临时文件中使用文件操作的示例。

我搜索了很多很好的示例/教程,发现只有基本的读/写/附加操作。

我需要了解如何在 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(使用前将#替换为@)

Python 和 Django - 如何在内存和临时文件中使用 的相关文章

  • 使用 pandas“to_csv”防止尾随零

    我正在尝试将 CSV 字符串导出到 D3 Web 应用程序 但是命令to csv坚持在数据中添加尾随 0 这会妨碍 D3 的正确使用 这是一个说明问题的最小示例 我的 简化的 数据框是 gt gt gt df pd DataFrame Al
  • macOS Sierra 上的 Python PyQt

    如何在装有 OS X Sierra 的 Mac 上使用 PyQt 4 或 5 看来我必须等待 PyQt 的新版本 但我不确定这是否属实 确保你有homebrew https brew sh安装 使用以下命令 brew tap cartr q
  • Python:帮助计数器和写入文件[重复]

    这个问题在这里已经有答案了 可能的重复 Python 如何创建连续的文件名 https stackoverflow com questions 2400827 python how do i create sequential file n
  • python selenium 3.0 - 无法识别安装在默认位置的 Firefox 47.0.1。 (壁虎驱动程序)

    以下是我的环境 操作系统 Windows 10 64 家庭版 浏览器 火狐47 0 1 32位 Python 2 7 10 12 64 位 硒 3 0 1 Geckodriver geckodriver v0 11 1 win64 zip
  • 打字!带有 pyautogui 的字符

    这可以模拟击键 import pyautogui pyautogui typewrite hello world interval 0 1 除了那个 它写道hello world 使用 FR 键盘布局 它写道hello world 使用 E
  • pyspark中的函数input()

    我的问题是当我输入 p 的值时 没有任何反应 它不执行 请问有办法修复它吗 import sys from pyspark import SparkContext sc SparkContext local simple App p inp
  • 姜戈。列出静态文件夹中的文件

    我遇到的一件看似基本的事情是将一个简单的静态文件列表 例如我的服务器上单个存储库目录的内容 呈现为链接列表 这是否安全是另一个问题 但假设我想这样做 这就是我的工作目录的样子 我想将模板中分析文件夹的所有文件作为链接列出 I have tr
  • 编写一个 python 脚本以在每天的给定时间生成时间戳(unix 纪元值)

    我想编写一个小型 python 它需要每天在特定时间 例如下午 1 点 生成一个简单的精确时间戳 该脚本将每天运行 我写了这样的东西 from datetime import datetime now datetime utcnow Cur
  • Tweepy API v2 身份验证

    如何使用 API v2 测试 Tweepy 身份验证 我的下面的代码由于身份验证而无法发布 但是 是否有其他方法可以在不调用发布推文 client create tweet 的情况下测试身份验证 import tweepy bearer t
  • 如何在Spyder(Anaconda 3)上安装PIL?

    这是我使用 conda install PIL 继续安装时出现的问题 它给了我这个 UnsatisfiableError The following specifications were found to be in conflict p
  • Matplotlib 轮廓图有 3 种颜色

    我想用 3 种不同的颜色绘制等高线图 到目前为止 我的代码如下所示 import numpy as np import matplotlib pyplot as plt xMin 0 xMax 3 xList np linspace xMi
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • Python 遍历目录树的方法是什么?

    我觉得分配文件和文件夹并执行 item 部分有点黑客 有什么建议么 我正在使用Python 3 2 from os import from os path import def dir contents path contents list
  • Python sqlite3游标没有属性commit

    当我运行这段代码时 path Scripts wallpapers single png conn sqlite3 connect Users Heaven Library Application Support Dock desktopp
  • 为什么导入 pdb 时出现此错误? “模块”对象没有属性“ascii_letters”

    尝试调试我的代码 我正在导入库pdb import sys from subprocess import check call import pdb functions if name main Code 我收到此错误 File reg p
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • 网页抓取 - 前往第 2 页

    如何访问数据集的第二页 无论我做什么 它都只返回第 1 页 import bs4 from urllib request import urlopen as uReq from bs4 import BeautifulSoup as sou

随机推荐