Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # shared/rest/fields/utils.py
- from os.path import basename
- import requests
- from tempfile import TemporaryFile
- from urllib.parse import urlsplit
- from django.core.files import File
- __all__ = ('url_to_file', )
- def url_to_file(url: str):
- try:
- temp_file = TemporaryFile()
- result = requests.get(url, stream=True)
- for chunk in result.iter_content(chunk_size=4096):
- temp_file.write(chunk)
- temp_file.seek(0)
- return File(temp_file, name=basename(urlsplit(url).path))
- except Exception:
- pass
- # shared/rest/fields/files.py
- from rest_framework.serializers import FileField, ImageField
- from .utils import url_to_file
- __all__ = ('UrlToFileField', 'UrlToImageField')
- class UrlToFieldMixin:
- def to_internal_value(self, data):
- """
- Transform the *incoming* url into a native File.
- """
- return url_to_file(data)
- class UrlToFileField(UrlToFieldMixin, FileField):
- pass
- class UrlToImageField(UrlToFieldMixin, ImageField):
- pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement