From f05915ef08cf3ded5da72c9ba6e685f76a9a0a45 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Tue, 30 Apr 2019 20:47:37 +0200 Subject: [PATCH] v8: Fix package download (#4968) --- .../src/common/services/umbrequesthelper.service.js | 2 ++ src/Umbraco.Web/Editors/PackageController.cs | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js index bad5f4e342..6c765ee135 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js @@ -384,6 +384,8 @@ function umbRequestHelper($http, $q, notificationsService, eventsService, formHe // Get the filename from the x-filename header or default to "download.bin" var filename = headers['x-filename'] || 'download.bin'; + filename = decodeURIComponent(filename); + // Determine the content type from the header or default to "application/octet-stream" var contentType = headers['content-type'] || octetStreamMime; diff --git a/src/Umbraco.Web/Editors/PackageController.cs b/src/Umbraco.Web/Editors/PackageController.cs index c60d035562..dd0b286a42 100644 --- a/src/Umbraco.Web/Editors/PackageController.cs +++ b/src/Umbraco.Web/Editors/PackageController.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; +using System.Text; +using System.Web; using System.Web.Http; using Semver; using Umbraco.Core.IO; @@ -94,6 +96,8 @@ namespace Umbraco.Web.Editors var fileName = Path.GetFileName(package.PackagePath); + var encoding = Encoding.UTF8; + var response = new HttpResponseMessage { Content = new StreamContent(File.OpenRead(fullPath)) @@ -102,15 +106,18 @@ namespace Umbraco.Web.Editors { ContentDisposition = new ContentDispositionHeaderValue("attachment") { - FileName = fileName + FileName = HttpUtility.UrlEncode(fileName, encoding) }, - ContentType = new MediaTypeHeaderValue( "application/octet-stream") + ContentType = new MediaTypeHeaderValue("application/octet-stream") + { + CharSet = encoding.WebName + } } } }; // Set custom header so umbRequestHelper.downloadFile can save the correct filename - response.Headers.Add("x-filename", fileName); + response.Headers.Add("x-filename", HttpUtility.UrlEncode(fileName, encoding)); return response; }