Index: django/db/models/fields/files.py
===================================================================
--- django/db/models/fields/files.py	(revision 8975)
+++ django/db/models/fields/files.py	(working copy)
@@ -71,7 +71,7 @@
 
     def save(self, name, content, save=True):
         name = self.field.generate_filename(self.instance, name)
-        self._name = self.storage.save(name, content)
+        self._name = self.storage.save(name, content, save)
         setattr(self.instance, self.field.name, self.name)
 
         # Update the filesize cache
Index: django/core/files/storage.py
===================================================================
--- django/core/files/storage.py	(revision 8975)
+++ django/core/files/storage.py	(working copy)
@@ -32,7 +32,7 @@
             file.__class__ = type(mixin.__name__, (mixin, file.__class__), {})
         return file
 
-    def save(self, name, content):
+    def save(self, name, content, save=True):
         """
         Saves new content to the file specified by name. The content should be a
         proper File object, ready to be read from the beginning.
@@ -42,7 +42,7 @@
             name = content.name
         
         name = self.get_available_name(name)
-        name = self._save(name, content)
+        name = self._save(name, content, save)
 
         # Store filenames with forward slashes, even on Windows
         return force_unicode(name.replace('\\', '/'))
Index: docs/howto/custom-file-storage.txt
===================================================================
--- docs/howto/custom-file-storage.txt	(revision 8975)
+++ docs/howto/custom-file-storage.txt	(working copy)
@@ -58,12 +58,14 @@
 you'll want to return some subclass here that implements logic specific to the
 backend storage system.
 
-``_save(name, content)``
+``_save(name, content, save=True)``
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
 Called by ``Storage.save()``. The ``name`` will already have gone through
 ``get_valid_name()`` and ``get_available_name()``, and the ``content`` will be a
-``File`` object itself. No return value is expected.
+``File`` object itself.  If the ``save`` argument is false, then the content
+should not be saved to backend.  The actual name of the destination file is expected
+as a return value, regardless of whether the save argument is True or False.
 
 ``get_valid_name(name)``
 ------------------------
Index: docs/ref/files/storage.txt
===================================================================
--- docs/ref/files/storage.txt	(revision 8975)
+++ docs/ref/files/storage.txt	(working copy)
@@ -34,7 +34,7 @@
 case of remote file storage this means that reading/writing could be quite slow,
 so be warned.
 
-``Storage.save(name, content)``
+``Storage.save(name, content, save=True)``
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Saves a new file using the storage system, preferably with the name specified.
@@ -46,6 +46,9 @@
 :class:`django.db.files.File` or of a subclass of
 :class:`~django.db.files.File`.
 
+If the save argument is false, the proper ``name`` will still be returned, but
+the file won't actually be saved to the backend.
+
 ``Storage.delete(name)``
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
