Last active
February 18, 2021 04:18
-
-
Save bryanchow/b25aeed8db9e82a68c920e66fd192536 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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