{"id":149,"date":"2015-04-28T18:33:57","date_gmt":"2015-04-28T10:33:57","guid":{"rendered":"http:\/\/vinta.ws\/code\/?p=149"},"modified":"2026-02-18T01:20:37","modified_gmt":"2026-02-17T17:20:37","slug":"read-and-save-file-in-django-python","status":"publish","type":"post","link":"https:\/\/vinta.ws\/code\/read-and-save-file-in-django-python.html","title":{"rendered":"Read and Write Files in Django and Python"},"content":{"rendered":"<p>File \u548c ImageFile \u63a5\u53d7 Python \u7684 file \u6216 StringIO \u7269\u4ef6<br \/>\n\u800c ContentFile \u63a5\u53d7 string<\/p>\n<p>ref:<br \/>\n<a href=\"https:\/\/docs.djangoproject.com\/en\/dev\/ref\/files\/file\/#the-file-object\">https:\/\/docs.djangoproject.com\/en\/dev\/ref\/files\/file\/#the-file-object<\/a><\/p>\n<h2>Django Form<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-py\">image_file = request.FILES['file']\n\n# \u65b9\u6cd5\u4e00\nprofile.mugshot.save(image_file.name, image_file)\n\n# \u65b9\u6cd5\u4e8c\nprofile.mugshot = image_file\n\nprofile.save()<\/code><\/pre>\n<h2>open('\/path\/to\/file.png')<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-py\">from django.core.files import File\n\nwith open('\/home\/vinta\/image.png', 'rb') as f:\n    profile.mugshot = File(f)\n    profile.save()<\/code><\/pre>\n<h2>Django ContentFile<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-py\">import os\nimport uuid\n\nfrom django.core.files.base import ContentFile\n\nimport requests\n\nurl = 'http:\/\/vinta.ws\/static\/photo.jpg'\nr = requests.get(url)\nfile_url, file_ext = os.path.splitext(r.url)\nfile_name = '%s%s' % (str(uuid.uuid4()).replace('-', ''), file_ext)\n\nprofile.mugshot.save('123.png', ContentFile(r.content), save=False)\n\n# \u5982\u679c profile.mugshot \u662f ImageField \u6b04\u4f4d\u7684\u8a71\n# \u53ef\u4ee5\u7528\u4ee5\u4e0b\u7684\u65b9\u5f0f\u4f86\u5224\u65b7\u5b83\u662f\u4e0d\u662f\u5408\u6cd5\u7684\u5716\u6a94\ntry:\n    profile.mugshot.width\nexcept TypeError:\n    raise RuntimeError('\u5716\u6a94\u683c\u5f0f\u4e0d\u6b63\u78ba')\n\nprofile.save()<\/code><\/pre>\n<h2>Data URI, Base64<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-py\">from binascii import a2b_base64\n\nfrom django.core.files.base import ContentFile\n\ndata_uri = 'data:image\/jpeg;base64,\/9j\/4AAQSkZJRg....'\nhead, data = data_uri.split(',')\nbinary_data = a2b_base64(data)\n\n# \u65b9\u6cd5\u4e00\nprofile.mugshot.save('whatever.jpg', ContentFile(binary_data), save=False)\nprofile.save()\n\n# \u4e0d\u80fd\u7528\u9019\u7a2e\u65b9\u5f0f\uff0c\u56e0\u70ba\u5c11\u4e86 file name\nprofile.mugshot = ContentFile(binary_data)\nprofile.save()\n\n# \u65b9\u6cd5\u4e8c\nf = open('image.png', 'wb')\nf.write(binary_data)\nf.close()\n\n# \u65b9\u6cd5\u4e09\nfrom StringIO import StringIO\nfrom PIL import Image\nimg = Image.open(StringIO(binary_data))\nprint img.size<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/19395649\/python-pil-create-and-save-image-from-data-uri\">https:\/\/stackoverflow.com\/questions\/19395649\/python-pil-create-and-save-image-from-data-uri<\/a><\/p>\n<h2>StringIO, PIL image<\/h2>\n<p>\u4f60\u5c31\u628a StringIO \u60f3\u6210\u662f <code>open(&#039;\/home\/vinta\/some_file.txt&#039;, &#039;rb&#039;)<\/code> \u7684 file \u7269\u4ef6<\/p>\n<pre class=\"line-numbers\"><code class=\"language-py\">from StringIO import StringIO\n\nfrom PIL import Image\nimport requests\n\nr = requests.get('http:\/\/vinta.ws\/static\/photo.jpg')\nimg = Image.open(StringIO(r.content))\nprint pil_image.size<\/code><\/pre>\n<h2>StringIO, PIL image, Django<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-py\">from StringIO import StringIO\n\nfrom django.core.files.base import ContentFile\n\nfrom PIL import Image\n\nimg = Image.open(instance.file)\n# or\nraw_img_io = StringIO(binary_data)\nimg = Image.open(raw_img_io)\nimg = img.resize((524, 328), Image.ANTIALIAS)\nimg_io = StringIO()\nimg.save(img_io, 'PNG', quality=100)\n\nprofile.image.save('whatever.png', ContentFile(img_io.getvalue()), save=False)\nprofile.save()<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/3723220\/how-do-you-convert-a-pil-image-to-a-django-file\">https:\/\/stackoverflow.com\/questions\/3723220\/how-do-you-convert-a-pil-image-to-a-django-file<\/a><\/p>\n<h2>Download file from URL, tempfile<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-py\">import os\nimport tempfile\nimport requests\nimport xlrd\n\ntry:\n    file_path = report.file.path\n    temp = None\nexcept NotImplementedError:\n    url = report.file.url\n    r = requests.get(url, stream=True)\n    file_url, file_ext = os.path.splitext(r.url)\n\n    # delete=True \u6703\u5728 temp.close() \u4e4b\u5f8c\u81ea\u5df1\u522a\u6389\n    temp = tempfile.NamedTemporaryFile(prefix='report_file_', suffix=file_ext, dir='\/tmp', delete=False)\n    file_path = temp.name\n\n    with open(file_path, 'wb') as f:\n        for chunk in r.iter_content(chunk_size=1024):\n            if chunk:\n                f.write(chunk)\n                f.flush()\n\nwb = xlrd.open_workbook(file_path)\n\n# \u56e0\u70ba\u662f tempfile.NamedTemporaryFile(delete=False)\n# \u6240\u4ee5\u4f60\u8981\u81ea\u5df1\u522a\u6389\ntry:\n    os.remove(temp.name)\nexcept AttributeError:\n    pass<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/16694907\/download-large-file-in-python-with-requests\">https:\/\/stackoverflow.com\/questions\/16694907\/download-large-file-in-python-with-requests<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>File \u548c ImageFile \u63a5\u53d7 Python \u7684 file \u6216 StringIO \u7269\u4ef6 \u800c ContentFile \u63a5\u53d7 string ref: https:\/\/docs.djangoproject.com\/en\/dev\/ref\/files\/file\/#the-file-object Django Form image_file = request.FILES['file'] # \u65b9\u6cd5\u4e00 profile.mugshot.save(image_file.name, image_file) # \u65b9\u6cd5\u4e8c profile.mugshot = image_file profile.save() open('\/path\/to\/file.png') from django.core.files import File with open('\/home\/vinta\/image.png', 'rb') as f: profile.mugshot = File(f) profile.save() Django ContentFile import os import uuid from django.core.files.base import ContentFile&hellip; <a href=\"https:\/\/vinta.ws\/code\/read-and-save-file-in-django-python.html\" class=\"more-link\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":777,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,116],"tags":[13,49,2],"class_list":["post-149","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-about-python","category-about-web-development","tag-django","tag-io","tag-python"],"_links":{"self":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":0,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/149\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media\/777"}],"wp:attachment":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media?parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/categories?post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/tags?post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}