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) + 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 + 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 + 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]