Skip to content

Instantly share code, notes, and snippets.

@bryanchow
Last active February 18, 2021 04:18
Show Gist options
  • Save bryanchow/b25aeed8db9e82a68c920e66fd192536 to your computer and use it in GitHub Desktop.
Save bryanchow/b25aeed8db9e82a68c920e66fd192536 to your computer and use it in GitHub Desktop.
# https://gist.github.com/bryanchow/b25aeed8db9e82a68c920e66fd192536
try:
from io import BytesIO
except ImportError:
from cStringIO import cStringIO as BytesIO
import requests
from mimetypes import guess_extension
from django.core import files
def save_url_to_filefield(instance, fieldname, url, ensure_extension=True):
"""
Fetch the passed-in URL and save it to a Django FileField/ImageField.
Usage:
instance = MyModel()
save_url_to_filefield(instance, 'field', "https://some-url/")
"""
response = requests.get(url)
if response.status_code == requests.codes.ok:
fp = BytesIO()
fp.write(response.content)
filename = url.split("/")[-1]
if ensure_extension:
extension = guess_extension(
response.headers['content-type'].partition(';')[0].strip()
)
if not filename.endswith(extension):
filename = "{}{}".format(filename, extension)
field = getattr(instance, fieldname)
field.save(filename, files.File(fp))
return True
return False
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment