From 567d7176a51d07515441b5393cec5d09ad2a0275 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Mon, 15 Jun 2020 11:05:40 +0200 Subject: [PATCH] Importing a doctype would never assign a value to UploadedFiles, turns out we don't need UploadedFiles on the model Additionally added a check to see if temp files were left behind and delete them to prevent errors when the same file has just been uploaded --- .../Editors/ContentTypeController.cs | 27 ++++++++++++------- .../Models/ContentTypeImportModel.cs | 5 +--- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web/Editors/ContentTypeController.cs b/src/Umbraco.Web/Editors/ContentTypeController.cs index 9c248f186b..4e1417fb03 100644 --- a/src/Umbraco.Web/Editors/ContentTypeController.cs +++ b/src/Umbraco.Web/Editors/ContentTypeController.cs @@ -551,7 +551,6 @@ namespace Umbraco.Web.Editors } [HttpPost] - [FileUploadCleanupFilter(false)] public async Task Upload() { if (Request.Content.IsMimeMultipartContent() == false) @@ -577,20 +576,28 @@ namespace Umbraco.Web.Editors var fileName = file.Headers.ContentDisposition.FileName.Trim('\"'); var ext = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower(); - // renaming the file because MultipartFormDataStreamProvider has created a random fileName instead of using the name from the - // content-disposition for more than 6 years now. Creating a CustomMultipartDataStreamProvider deriving from MultipartFormDataStreamProvider - // seems like a cleaner option, but I'm not sure where to put it and renaming only takes one line of code. - System.IO.File.Move(result.FileData[0].LocalFileName, root + "\\" + fileName); + var destFileName = root + "\\" + fileName; + try + { + // due to a bug before 8.7.0 we didn't delete temp files, so we need to make sure to delete before + // moving else you get errors and the upload fails without a message in the UI (there's a JS error) + if(System.IO.File.Exists(destFileName)) + System.IO.File.Delete(destFileName); + + // renaming the file because MultipartFormDataStreamProvider has created a random fileName instead of using the name from the + // content-disposition for more than 6 years now. Creating a CustomMultipartDataStreamProvider deriving from MultipartFormDataStreamProvider + // seems like a cleaner option, but I'm not sure where to put it and renaming only takes one line of code. + System.IO.File.Move(result.FileData[0].LocalFileName, destFileName); + } + catch (Exception ex) + { + Logger.Error(ex, "Error uploading udt file to App_Data: {File}", destFileName); + } if (ext.InvariantEquals("udt")) { model.TempFileName = Path.Combine(root, fileName); - model.UploadedFiles.Add(new ContentPropertyFile - { - TempFilePath = model.TempFileName - }); - var xd = new XmlDocument { XmlResolver = null diff --git a/src/Umbraco.Web/Models/ContentTypeImportModel.cs b/src/Umbraco.Web/Models/ContentTypeImportModel.cs index f6f9a5926d..fbe3e920f8 100644 --- a/src/Umbraco.Web/Models/ContentTypeImportModel.cs +++ b/src/Umbraco.Web/Models/ContentTypeImportModel.cs @@ -1,12 +1,11 @@ using System.Collections.Generic; using System.Runtime.Serialization; -using Umbraco.Core.Models.Editors; using Umbraco.Web.Models.ContentEditing; namespace Umbraco.Web.Models { [DataContract(Name = "contentTypeImportModel")] - public class ContentTypeImportModel : INotificationModel, IHaveUploadedFiles + public class ContentTypeImportModel : INotificationModel { [DataMember(Name = "alias")] public string Alias { get; set; } @@ -19,7 +18,5 @@ namespace Umbraco.Web.Models [DataMember(Name = "tempFileName")] public string TempFileName { get; set; } - - public List UploadedFiles => new List(); } }