<p>文件对象上的<code>read()</code>方法是从文件对象中访问内容的方法,而不管该文件是在内存中还是存储在磁盘上。它类似于其他实用程序文件访问方法,如<code>readlines</code>或<code>seek</code>。</p>
<p>这种行为类似于<a href="http://docs.python.org/2.7/library/stdtypes.html#bltin-file-objects">built into</a>Python,后者反过来是通过操作系统的<code>fread()</code>方法构建的。</p>
<blockquote>
<p>Read at most size bytes from the file (less if the read hits EOF
before obtaining size bytes). If the size argument is negative or
omitted, read all data until EOF is reached. The bytes are returned as
a string object. An empty string is returned when EOF is encountered
immediately. (For certain files, like ttys, it makes sense to continue
reading after an EOF is hit.) Note that this method may call the
underlying C function fread() more than once in an effort to acquire
as close to size bytes as possible. Also note that when in
non-blocking mode, less data than was requested may be returned, even
if no size parameter was given.</p>
</blockquote>
<p>关于<code>InMemoryUploadedFile</code>确切存储在哪里的问题,它是一个<a href="https://docs.djangoproject.com/en/dev/topics/http/file-uploads/">bit more complicated</a>。</p>
<blockquote>
<p>Before you save uploaded files, the data needs to be stored somewhere.</p>
<p>By default, if an uploaded file is smaller than 2.5 megabytes, Django
will hold the entire contents of the upload in memory. This means that
saving the file involves only a read from memory and a write to disk
and thus is very fast.</p>
<p>However, if an uploaded file is too large, Django will write the
uploaded file to a temporary file stored in your system’s temporary
directory. On a Unix-like platform this means you can expect Django to
generate a file called something like /tmp/tmpzfp6I6.upload. If an
upload is large enough, you can watch this file grow in size as Django
streams the data onto disk.</p>
<p>These specifics – 2.5 megabytes; /tmp; etc. – are simply “reasonable
defaults”. Read on for details on how you can customize or completely
replace upload behavior.</p>
</blockquote>