diff options
Diffstat (limited to 'django/core')
| -rw-r--r-- | django/core/files/base.py | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/django/core/files/base.py b/django/core/files/base.py index 48d0be43f0..29dbb6fcc1 100644 --- a/django/core/files/base.py +++ b/django/core/files/base.py @@ -36,8 +36,13 @@ class File(FileProxyMixin): if not hasattr(self, '_size'): if hasattr(self.file, 'size'): self._size = self.file.size - elif os.path.exists(self.file.name): + elif hasattr(self.file, 'name') and os.path.exists(self.file.name): self._size = os.path.getsize(self.file.name) + elif hasattr(self.file, 'tell') and hasattr(self.file, 'seek'): + pos = self.file.tell() + self.file.seek(0, os.SEEK_END) + self._size = self.file.tell() + self.file.seek(pos) else: raise AttributeError("Unable to determine the file's size.") return self._size @@ -61,12 +66,12 @@ class File(FileProxyMixin): if hasattr(self, 'seek'): self.seek(0) - # Assume the pointer is at zero... - counter = self.size - while counter > 0: - yield self.read(chunk_size) - counter -= chunk_size + while True: + data = self.read(chunk_size) + if not data: + break + yield data def multiple_chunks(self, chunk_size=None): """ |
