summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--deluge/httpdownloader.py32
1 files changed, 18 insertions, 14 deletions
diff --git a/deluge/httpdownloader.py b/deluge/httpdownloader.py
index 678f78183..171e521f6 100644
--- a/deluge/httpdownloader.py
+++ b/deluge/httpdownloader.py
@@ -38,6 +38,7 @@ from twisted.python.failure import Failure
from twisted.internet import reactor
from deluge.log import setupLogger, LOG as log
from common import get_version
+import cgi
import os.path
import zlib
@@ -86,20 +87,23 @@ class HTTPDownloader(client.HTTPDownloader):
self.decoder = zlib.decompressobj(zlib.MAX_WBITS + 32)
if "content-disposition" in headers and not self.force_filename:
- new_file_name = str(headers["content-disposition"][0]).split(";")[1].split("=")[1]
- new_file_name = sanitise_filename(new_file_name)
- new_file_name = os.path.join(os.path.split(self.fileName)[0], new_file_name)
-
- count = 1
- fileroot = os.path.splitext(new_file_name)[0]
- fileext = os.path.splitext(new_file_name)[1]
- while os.path.isfile(new_file_name):
- # Increment filename if already exists
- new_file_name = "%s-%s%s" % (fileroot, count, fileext)
- count += 1
-
- self.fileName = new_file_name
- self.value = new_file_name
+ content_disp = str(headers["content-disposition"][0])
+ content_disp_params = cgi.parse_header(content_disp)[1]
+ if "filename" in content_disp_params:
+ new_file_name = content_disp_params["filename"]
+ new_file_name = sanitise_filename(new_file_name)
+ new_file_name = os.path.join(os.path.split(self.fileName)[0], new_file_name)
+
+ count = 1
+ fileroot = os.path.splitext(new_file_name)[0]
+ fileext = os.path.splitext(new_file_name)[1]
+ while os.path.isfile(new_file_name):
+ # Increment filename if already exists
+ new_file_name = "%s-%s%s" % (fileroot, count, fileext)
+ count += 1
+
+ self.fileName = new_file_name
+ self.value = new_file_name
elif self.code in (http.MOVED_PERMANENTLY, http.FOUND, http.SEE_OTHER, http.TEMPORARY_REDIRECT):
location = headers["location"][0]