diff --git a/django/core/files/base.py b/django/core/files/base.py
index 6204d71..6a7fbc4 100644
--- a/django/core/files/base.py
+++ b/django/core/files/base.py
@@ -60,13 +60,18 @@ class File(FileProxyMixin):
             chunk_size = self.DEFAULT_CHUNK_SIZE
 
         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
+            try:
+                self.seek(0)
+            except IOError, e:
+                if e.errno != 29:
+                    # errno 29 is illegal seek, i.e. 'self.file' is a pipe
+                    # or anything else non-seekable
+                    raise
+
+        chunk = self.read(chunk_size)
+        while chunk:
+            yield chunk
+            chunk = self.read(chunk_size)
 
     def multiple_chunks(self, chunk_size=None):
         """
