fix: MediaFileUpload error if file does not exist (#1127)

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
- [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/google-api-python-client/issues/new/choose) before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
- [x] Ensure the tests and linter pass
- [x] Code coverage does not decrease (if any source code was changed)
- [x] Appropriate docs were updated (if necessary)

Fixes #798 🦕
diff --git a/googleapiclient/http.py b/googleapiclient/http.py
index b8e1b8e..e842bb4 100644
--- a/googleapiclient/http.py
+++ b/googleapiclient/http.py
@@ -573,8 +573,9 @@
       resumable: bool, True if this is a resumable upload. False means upload
         in a single request.
     """
+        self._fd = None
         self._filename = filename
-        fd = open(self._filename, "rb")
+        self._fd = open(self._filename, "rb")
         if mimetype is None:
             # No mimetype provided, make a guess.
             mimetype, _ = mimetypes.guess_type(filename)
@@ -582,11 +583,12 @@
                 # Guess failed, use octet-stream.
                 mimetype = "application/octet-stream"
         super(MediaFileUpload, self).__init__(
-            fd, mimetype, chunksize=chunksize, resumable=resumable
+            self._fd, mimetype, chunksize=chunksize, resumable=resumable
         )
 
     def __del__(self):
-        self._fd.close()
+        if self._fd:
+            self._fd.close()
 
     def to_json(self):
         """Creating a JSON representation of an instance of MediaFileUpload.
diff --git a/tests/test_http.py b/tests/test_http.py
index 5293a6a..9bfae93 100644
--- a/tests/test_http.py
+++ b/tests/test_http.py
@@ -248,6 +248,10 @@
         self.assertEqual(500, new_upload.chunksize())
         self.assertEqual(b"PNG", new_upload.getbytes(1, 3))
 
+    def test_media_file_upload_raises_on_file_not_found(self):
+        with self.assertRaises(FileNotFoundError):
+            MediaFileUpload(datafile("missing.png"))
+
     def test_media_file_upload_raises_on_invalid_chunksize(self):
         self.assertRaises(
             InvalidChunkSizeError,